ValueError [Object] должен иметь значение для поля "item_ptr", прежде чем можно будет использовать это отношение многие ко многим - PullRequest
0 голосов
/ 12 января 2020

Я новичок в Python & Django, в настоящее время работаю над приложением доставки еды.

При попытке добавить новый объект Pizza в администраторе появляется следующая ошибка: "" необходимо указать значение для поля "item_ptr", прежде чем можно будет использовать это отношение "многие ко многим".

У меня есть следующее: в models.py

class Item(models.Model):
    name = models.CharField(max_length=64)
    price = models.DecimalField(decimal_places=2,max_digits=10, default=0)
    size = models.CharField(choices=SIZES, max_length=64, default="R")

    def __str__(self):
        return f"{self.name}, {self.size}, ${self.price}"

class Pizza(Item, abstractToppingConfig):
    type = models.ForeignKey(pizzaType, on_delete=models.CASCADE)

    def save(self, *args, **kwargs):
        if not self.id:
            newItem = Item(name=self.name, price=self.price, size=self.size)
            newItem.save()
            self.item_ptr = newItem
        super(Pizza, self).save(*args, **kwargs)


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

Я посмотрел несколько ответов здесь и понял, что ошибка происходит из-за чтобы родительский класс не был сохранен во время создания объекта Pizza. С этой целью я пытаюсь переопределить метод сохранения модели, чтобы сначала сохранить объект Item и добавить связь, однако, похоже, все это работает.

Создание и сохранение объекта в Python Оболочка работает просто отлично, но не происходит при сохранении объекта Pizza.

Django Версия: 2.2.6

Полный возврат: https://gist.github.com/Michelle-lele/7b1e60a7a1cf804bd74cfdaae5091c4e

1 Ответ

0 голосов
/ 21 января 2020

Для тех, кто может столкнуться с той же проблемой. Я использовал метод clean () в абстрактном классе, таким образом вызывая вышеуказанную ошибку.

Django Проверка модели ManyToMany

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