0

Я пытаюсь написать модели для проекта типа инвентаря в Django и не знаю, как наилучшим образом определить мои модели. Должен ли я выбрать абстрактные базовые классы, Multi-Table Inheritance, прокси-модели или что-то еще, чтобы получить мои модели, чтобы вести себя в соответствии с этими требованиями:Какой тип наследования модели выбрать в Django

  • Обобщенная модель продукта, который может отслеживать уровень запасов продукта
  • пользователи с правами администратора должны иметь возможность добавить новый универсальный продукт с помощью администратора
  • конкретных моделей продуктов, которые могут иметь оборудование серийный номер добавлен как атрибут
  • конкретного продукта может быть связано с моим заказом/модели Customer

Возможно ли это сделать, и чтобы он соответствовал моим требованиям без каких-либо проблем или есть лучший подход?

class Product(models.Model): 
    name = models.CharField(max_length=250) 
    description = models.TextField(blank=True) 
    price = models.DecimalField(max_digits=8, decimal_places=2) 
    stock_level = models.IntegerField() 

class SpecificProduct(Product): 
    product = models.OneToOneField(Product) 
    order = models.OneToOneField(Order) 
    owner = models.OneToOneField(Customer) 
    serial_nr = models.CharField(blank=True, max_length=250) 

В идеале я хотел бы иметь поведение, которое работает что-то вроде этого:

customer = Customer.objects.create([. . .]) 
order = Order.objects.create([. . .]) 
widget = Product.objects.create([. . .]) 
my_widget = SpecificProduct.objects.create(
    product=widget, 
    order=order, 
    owner=customer, 
    serial_nr="12345" 
) 

я на правильном пути? Любая помощь/совет будут высоко оценены!

ответ

0

Ни AbstractModel, ни ProxyModel не были бы полезны, потому что ни один из них не создает таблицу для вас данных (без абстрактной таблицы продуктов и без специальной таблицы продуктов прокси).

Я не понимаю, почему вы должны OneToOneField к вашей Product модели, как вы унаследовали все Product полей в SpecificProduct, но если вам нужна ссылка на экземпляр базового продукта, что это путь. Рассмотрите django-mptt для ваших древовидных моделей. Он предоставляет множество полезных инструментов для древовидных структур.

 Смежные вопросы

  • Нет связанных вопросов^_^