Поле ManyToMany возвращает None, несмотря на наличие значения - PullRequest
1 голос
/ 22 июня 2019

У меня 2 класса: категории и пиццы.Одна из них представляет собой список категорий для объекта, а другая является объектом.Проблема в том, что когда я вызываю объект, я вижу все поля, за исключением того, что поле ManyToMany возвращает catalog.Category.None вместо назначенного значения.

Вот мой models.py:

class Category(models.Model):
    CLASSIC = 'Classic'
    VEGETARIAN = 'Vegetarian'
    SPICY = 'Spicy'
    TYPE = [
        (CLASSIC, 'Classic'),
        (VEGETARIAN, 'Vegetarian'),
        (SPICY, 'Spicy')
    ]

    type = models.CharField(
        max_length=100,
        choices=TYPE
    )

    def __str__(self):
        return self.type

    class Meta:
        verbose_name_plural = 'Categories'


class Pizza(models.Model):
    name = models.CharField(max_length=100)
    price = models.IntegerField()
    size = models.OneToOneField(
        Size,
        on_delete=models.CASCADE,
        primary_key=True
    )
    category = models.ManyToManyField(Category)

    def __str__(self):
        return f"name = {self.name}, size = {self.size}, category = {self.category}"

А вот мой вывод оболочки:

>>> from catalog.models import Pizza
>>> from catalog.models import Category
>>> pizza = Pizza.objects.all()
>>> pizza
<QuerySet [<Pizza: name = Chicken, prices = 8, 10, category = catalog.Category.None>, <Pizza: name = Pepperoni, prices = 8, 12, category = catalog.Category.None>, <Pizza: name = Mushroom, prices = 7, 9, category = catalog.Category.None>]>
>>> cat = Category.objects.filter(pizza=1)
>>> cat
<QuerySet [<Category: Classic>]>
>>> cat = Category.objects.filter(pizza=2)
>>> cat
<QuerySet [<Category: Classic>, <Category: Spicy>]>

1 Ответ

0 голосов
/ 22 июня 2019

A some_pizza.category действительно вернет catalog.Category.None, так как это ManyRelatedManager, и это ожидаемое значение str(..) для таких ManyRelatedManager.Вы должны добавить .all(), чтобы отобразить это как список Category s:

class Pizza(models.Model):

    # ...

    def __str__(self):
        return f"name = {self.name}, size = {self.size}, category = {self.category<b>.all()</b>}"

Примечание : так как Pizza может иметь ноль, один или болеекатегориях, может быть лучше назвать ManyToManyField categories вместо category.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...