Ошибка атрибута M2M с FOO_set.all() и FOO не является набором запросов

У меня проблема с набором запросов, связанных с M2M: упрощенная модель является

class Category(models.Model):
   name = models.CharField(max_length=200)

class Product(models.Model):
   name = models.CharField(max_length=200)
   category = models.ManyToManyField(
   Category, blank=True, null=True, related_name="categorytest")

Обычно я делаю связанные запросы, используя связанное имя (которое здесь работает без проблем), но в этом случае я хотел попробовать "set_all()". Скажем, я делаю так: elecs = Category.objects.get(name="Electronics") затем: elecs.product_set.all()
. Я получаю AttributeError: объект 'Category' не имеет атрибута 'product_set'. Я немного удивлен, потому что это ошибка, которая происходит при использовании queryset вместо экземпляра модели, но если бы требовалось подтверждение, то тип(elecs) дает мне <class 'store.models.Category'>. Я несколько раз мигрировал/перезагружал db, без изменений. Есть идеи? Спасибо

Вы указываете имя отношения в обратном порядке с помощью related_name=… параметра [Django-doc]. Поскольку вы установили related_name='categorytest', вы можете получить к ним доступ с помощью:

elecs.categorytest.all()

Но, скорее всего, использование categorytest не является хорошей идеей. Возможно, лучше указать это, например, как related_name='products'.

Вернуться на верх