Как добавить класс polymorphi c в Django? - PullRequest
0 голосов
/ 19 июня 2020

Пытаюсь сделать приложение для ресторана на django; Мне нужно создать меню для разных типов элементов, и все эти разные типы элементов должны по существу быть продуктом , чтобы я мог добавить этот продукт в соответствующую корзину пользователя. Вот мои пункты меню:

from django.db import models
from django.contrib.auth.models import User

class Product(models.Model):
    price = models.DecimalField(decimal_places=2, max_digits=10)

class Pizza(Product):
    pizzatype = models.CharField(max_length=15)
    extras = models.TextField(max_length=50)
    size = models.CharField(max_length=10)

class Subs(Product):
    name = models.TextField(max_length=64)
    size = models.CharField(max_length=10)

class DinnerPlatters(Product):
    name = models.TextField(max_length=64)
    size = models.CharField(max_length=10)

class Pasta(Product):
    name = models.TextField(max_length=64)

class Salads(Product):
    name = models.TextField(max_length=64)

Как видно, я попытался получить модели для различных типов пунктов меню из одной модели Product , но при запуске makemigrations, Я получаю следующее сообщение на терминале:

You are trying to add a non-nullable field 'product_ptr' to dinnerplatters without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
 1) Provide a one-off default now (will be set on all existing rows with a null value for this column)
 2) Quit, and let me add a default in models.py

Я попытался найти решение своей проблемы в Google, но не смог найти подходящего решения.

Я новичок ie в Django и это мое первое приложение, поэтому мы будем благодарны за любую помощь или любой другой метод решения моей проблемы.

1 Ответ

0 голосов
/ 19 июня 2020

Поскольку ваши модели наследуют от модели продукта, вы используете многотабличное наследование. Теперь, когда наследование нескольких таблиц автоматически создает OneToOneField как classname_ptr между моделью наследования и базовой моделью, ваши модели, которые наследуются от модели продукта, имеют поле product_ptr. Поскольку в вашей модели есть поле product_ptr, вам следует добавить значение по умолчанию для существующих строк, которое вы сохранили ранее.

https://docs.djangoproject.com/en/3.0/topics/db/models/#multi -table-inheritance

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