我有两个模型(Slot, Appointment)
。关于任命,我已经定义了一个与槽位模型的OneToOne
关系,到目前为止还不错;感谢RelatedManager
,我可以从插槽对象访问约会,但这是在python级别完成的,我需要(为了将来进行一些更改)在appointment_id
表上创建Slot
列。
class Slot(models.Model):
start_at = models.DateTimeField()
end_at = models.DateTimeField()
duration = DateTimeRangeField(
null=True,
blank=True
)
# Bidirectional
appointment = models.OneToOneField(
"appointments.Appointment",
on_delete=models.SET_NULL,
related_name="slot",
blank=True,
null=True
)
class Appointment(models.Model):
slot = models.OneToOneField(
Slot,
on_delete=models.SET_NULL,
related_name="appointment",
null=True,
blank=True,
)
上面的代码在尝试创建如下迁移时会引发一些错误:
appointments.Appointment.slot: (fields.E302) Reverse accessor for 'Appointment.slot' clashes with field name 'Slot.appointment'.
HINT: Rename field 'Slot.appointment', or add/change a related_name argument to the definition for field 'Appointment.slot'.
基本上,由于ORM的python部分,您不能在两个模型上定义相同的字段。
关于如何实现此目标的任何想法。我想我将不得不覆盖RelatedManager
的某些部分。我可以抛出SQL,但是在代码级别上并不清楚。