Я застрял, пытаясь понять, как сделать следующее:
У меня есть несколько сущностей:
PurchaseItem (товар в корзине пользователя), Order (заказ — объединяет один или несколько PurchaseItems), OrderStatusHistory (это элементы статуса для Order — вместо того, чтобы изменять, я создаю новые, чтобы иметь возможность ретроспективно просмотреть, как статус изменился с течением времени) .
Я не хочу, чтобы что-то из этого создавалось через админку — все они создаются через публичный интерфейс, но мне нужно показать Орден и его атрибуты в админке:
Мне нужно иметь возможность показать список заказов. Это просто.
Когда я нажимаю на заказ или что-то еще, я хочу иметь возможность просматривать детали заказа: список предметов покупки.
Мне нужно иметь возможность изменить статус заказа - выбрать из раскрывающегося списка или что-то в этом роде - однако это действие вызывает создание нового элемента statusHistory.
Возможно ли все это с интерфейсом администратора или я должен забыть об этом и создать свою собственную реализацию со страницами и всем остальным?
Мои модели выглядят так:
class Order(models.Model):
dateCreated = models.DateTimeField(null=False,default=datetime.now())
items = models.ManyToManyField(PurchaseItem)
user_name = models.CharField(null=True,blank=True,max_length=200)
phone = models.CharField(null=False,blank=False,max_length=11,validators=[validate_phone])
phone_ext = models.CharField(null=True,blank=True,max_length=5,validators=[validate_phone_ext])
email = models.CharField(null=False,blank=False,max_length=100,validators=[validators.EmailValidator])
addressCity = models.CharField(null=False,blank=False,max_length=100)
addressStreet = models.CharField(null=False,blank=False,max_length=200)
notes = models.TextField(null=True,blank=True)
accessKey = models.CharField(max_length=32,default=CreateAccessKey())
class PurchaseItem(models.Model):
picture = models.ForeignKey(Picture, null=False)
paperType = models.CharField(null=False,max_length=200)
printSize = models.CharField(null=False,max_length=200)
quantity = models.IntegerField(default=1, validators=[validators.MinValueValidator(1)])
price = models.DecimalField(decimal_places=2,max_digits=8)
dateCreated = models.DateTimeField(null=False)
cost = models.DecimalField(decimal_places=2,max_digits=8)
class OrderStatusHistory(models.Model):
orderId = models.ForeignKey(Order)
dateSet = models.DateTimeField(null=False,default=datetime.now())
status = models.IntegerField(choices=OrderStatus,default=0,null=False,blank=False)
comment = models.TextField(null=True,blank=True)
Следующая встроенная настройка не работает, потому что у заказа нет FK для PurchaseItems:
class OrderStatusHistoryAdmin(admin.StackedInline):
model = OrderStatusHistory
class PurchaseItemAdmin(admin.StackedInline):
model = PurchaseItem
class OrderAdmin(admin.ModelAdmin):
model = Order
inlines = [OrderStatusHistoryAdmin,PurchaseItemAdmin]
admin.site.register(Order,OrderAdmin)