Ошибка атрибута 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'
.