У меня есть родительский класс Dish
и дочерний Pizza
(среди других типов di sh). Я пытаюсь сделать Dish
абстрактным сейчас, снял регистрацию с admin.py
, потому что в конечном итоге каждый Di sh имеет какой-то тип, и каждая пицца - это ровно один Di sh (соответствует 1 di sh ID) - отсюда мой OneToOneField
logi c (если в этом есть смысл). Сначала у меня был бетон Dish
, но когда я добавляю class Meta: abstract = True
, я получаю следующие ошибки:
orders.Pizza.dish: (fields.E300) Field defines a relation with model 'Dish', which is either not installed, or is abstract.
orders.Pizza.dish: (fields.E307) The field orders.Pizza.dish was declared with a lazy reference to 'orders.dish', but app 'orders' doesn't provide model 'dish'.
Я читал другие сообщения SO, в которых предлагалось указать здесь имя приложения (orders
): dish = models.OneToOneField('orders.Dish', etc..
, но это тоже не работает, к тому же все модели находятся в models.py
в одном приложении orders
. Ниже мой код. В чем проблема?
class Dish(models.Model):
PIZZA = 'PIZZA'
SUB = 'SUB'
PASTASALAD = 'PASTASALAD'
PLATTER = 'PLATTER'
TYPE_CHOICES = ( (PIZZA, 'Pizza'), (SUB, 'Sub'), (PASTASALAD, 'PastaSalad'), (PLATTER, 'Platter') )
name = models.CharField(max_length=64, blank=True) # blank makes name optional
type = models.CharField(max_length=64, choices=TYPE_CHOICES, blank=True)
size = models.CharField(max_length=1, choices=SIZE_CHOICES, default=SMALL, blank=True)
price = models.DecimalField(max_digits=6, decimal_places=2, default=None)
class Meta:
abstract = True
def __str__(self):
return f"{self.name} {self.size} - Price: ${self.price}"
class Pizza(Dish):
dish = models.OneToOneField(Dish, on_delete=models.CASCADE, related_name="dish_id_pizza", parent_link=True)
REGULAR = 'REGULAR'
SICILIAN = 'SICILIAN'
STYLE_CHOICES = ( (REGULAR, 'Regular'), (SICILIAN, 'Sicilian'),)
style = models.CharField(max_length=7, choices=STYLE_CHOICES, default=REGULAR)
topping_count = models.IntegerField(default=0, validators=[MaxValueValidator(5), MinValueValidator(0)])
def __str__(self):
return f"{self.size} {self.style} pizza with {self.topping_count} toppings: ${self.price}"