我有一个模型PlacedOrder
,其他模型使用OneToOneField
和ForeignKey
引用了该模型。因此,我正在使用StackedTabularInline
在我的PlacedOrderAdmin
模型上进行渲染。
奇怪的行为是,当我启动django应用程序时,我可以毫无问题地创建一个新的PlacedOrder
对象,但是在此之后,当我尝试创建另一个对象时,内联字段上的内容已经被来自我刚刚创建的对象,无论尝试如何都无法创建新对象,它不断向我显示错误“请更正以下错误。”
只有属于内联的字段会这样做,来自模型PlacedOrder
的字段是“干净的”。如果我重新启动django,我可以看到所有创建的对象,并且它们的数据似乎正确。
部分模型:
class PlacedOrder(models.Model):
id = models.UUIDField(
primary_key=True,
default=uuid.uuid4(),
editable=False
)
...
total = models.DecimalField(
_('total'),
max_digits=8,
decimal_places=2
)
class OrderStatus(models.Model):
placed_order = models.OneToOneField(
PlacedOrder,
on_delete=models.CASCADE
)
status = models.CharField(
_('status'),
choices=STATUS_CHOICES,
max_length=30,
)
这里是内联之一:
class OrderStatusInline(nested_admin.NestedTabularInline):
model = app_models.OrderStatus
和订单
@admin.register(app_models.PlacedOrder)
class OrderAdmin(nested_admin.NestedModelAdmin):
inlines = (OrderStatusInline, OrderPaymentInline, OrderDeliveryInline, SelectedProductInline, )
因此我发现问题与我在此处发布的内容无关,实际上是我在id
内声明PlacedOrder
的方式。
在我的原始模型上,我将默认设置设置为uuid.uuid4()
,但这会造成所有问题,一旦将其更改为uuid.uuid4
,一切都会好起来的。
答案 0 :(得分:0)
我认为问题在于,对于OneToOne
关系,定义关系的实际字段必须位于内联模型上,而不是父模型上-与外键完全相同
有关更多信息,请查看此帖子:Django Admin: OneToOne Relation as an Inline?