双向OneToOne关系-Django

时间:2019-07-08 19:44:13

标签: python django python-3.x postgresql django-models

我有两个模型(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,但是在代码级别上并不清楚。

0 个答案:

没有答案