Невозможность доступа к связанным объектам с общим внешним ключом в Django и типах контента
Эй, ребята, я не знаю, правильно ли я делаю, но у меня есть эти классы или модели
class CartItem(models.Model):
cart = models.ForeignKey(Cart, on_delete=models.CASCADE)
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.UUIDField()
content_object = GenericForeignKey('content_type','object_id')
и у меня есть эта связанная модель, использующая общий внешний ключ
class MstProduct(PhysicalProduct):
user = models.ForeignKey(User, models.PROTECT)
purposes = models.ManyToManyField(ProductPurpose, null = True, blank = True, related_name='products')
madeOf = models.ManyToManyField(AffeliateProduct, null = True, blank = True)
category = models.ForeignKey(Category, on_delete=models.PROTECT, related_name = "physical_products")
theme = models.ForeignKey(Theme, on_delete= models.SET_NULL, null = True, blank = True, related_name = 'physical_products')
art_type = models.ForeignKey(ArtType, on_delete=models.SET_NULL, null = True,blank = True)
cart_items = GenericRelation(CartItem,related_query_name='product')
Я хочу получить доступ к товару, связанному с экземпляром CartItem, из общего поля внешнего ключа, я пытался сделать это, используя аргумент related_query_name, но после того, как я попробовал следующее:
CartItem.objects.first().product
я получаю ошибку следующего вида:
Traceback (most recent call last):
File "/home/alaa/.local/lib/python3.10/site-packages/django/db/models/fields/related_descriptors.py", line 678, in get_queryset return self.instance._prefetched_objects_cache[ AttributeError: у объекта 'CartItem' нет атрибута '_prefetched_objects_cache'
Во время обработки вышеуказанного исключения произошло другое исключение:
Traceback (последний последний вызов): Файл "", строка 1, in Файл "/home/alaa/.local/lib/python3.10/site-packages/django/db/models/manager.py", строка 85, in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) Файл "/home/alaa/.local/lib/python3.10/site-packages/django/db/models/fields/related_descriptors.py", строка 683, in get_queryset return self._apply_rel_filters(queryset) Файл "/home/alaa/.local/lib/python3.10/site-packages/django/db/models/fields/related_descriptors.py", строка 640, in _apply_rel_filters val = getattr(self.instance, field.attname) AttributeError: у объекта 'CartItem' нет атрибута 'productId'
productId по сути является полем этого абстрактного класса:
class Product(models.Model):
productId = models.UUIDField(default=uuid4, primary_key=True, editable=False)
picture = models.ImageField()
discription = models.TextField(max_length=2000)
price = models.FloatField()
orders = GenericRelation(Order, related_query_name='orders')
createdAt = models.DateTimeField(auto_now_add=True)
updatedAt = models.DateTimeField(auto_now=True)
rates = GenericRelation(ProductRate,related_query_name='rates')
themes = GenericRelation(Theme)
purchase_num = models.PositiveBigIntegerField()
я немного запутался, если кто-то может помочь, я буду очень признателен
Согласно docs, try.
obj_cartitem = obj_product.productId