1

Hello I have a problem that I want to link foreign key to model's related object in other words I want to link foreign key to not loaded object's fields.

class Category(models.Model):
    ...
    filter_option_content_type = models.ForeignKey(ContentType, on_delete=models.SET_NULL, limit_choices_to=(
            models.Q(app_label='catalog', model='FrameSize') |
            models.Q(app_label='catalog', model='ShoeSize') |
            models.Q(app_label='catalog', model='ClothSize')
    ), null=True)   
     ... 


class Product(models.Model):
    ...
    category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True)
    ...


class ProductItem(models.Model):
    ...
    model = models.ForeignKey(Product, verbose_name='Модель', on_delete=models.CASCADE, related_name='productitem')
    size = models.ForeignKey('model.category.filter_option_content_type', on_delete=models.SET_NULL, null=True)
    ...

And sure i got this error:

ValueError: Invalid model reference 'model.category.filter_option_content_type'. String model references must be of the form 'app_label.ModelName'

is it possible to do relation like this wtihout using GenericForeignKey instead of ForeignKey?

Kriptos
  • 11
  • 2

1 Answers1

0

I think that you don't really need to add an additional relation since you can access the field you want via Product:

item = ProductItem()
size = item.model.category.filter_option_content_type 

In case you'd like to query using this field, it would look like:

item = ProductItem.objects.filter(
    model__in=Product.objects.filter(
        category__in=Category.objects.filter(
            filter_option_content_type='<your desired value of size>'
        )
    )
)

Since the relations are based on Foreign Keys which are indexed - such query shouldn't have a noticeable effect on performance (despite that it may seem a bit awkward)

Egor Wexler
  • 1,754
  • 6
  • 22