我有以下型号:
class Todo(models.Model):
user = models.OneToOneField(User)
note = models.CharField(max_length=255)
is_important = models.BooleanField(default=False)
is_complete = models.BooleanField(default=False)
reminder = models.OneToOneField(Reminder, blank=True, null=True, on_delete=models.SET_NULL)
class Reminder(models.Model):
start_time = models.DateTimeField()
stop_time = models.DateTimeField(blank=True)
基本上,当提供了开始时间和可选结束时间时,Todo将成为一个提醒。在
现在,当我删除一个提醒对象时,Todo对象中的Reminder字段设置为Null,这是我想要的。在
如何设置这些模型,以便在删除Todo对象时,相应的提醒对象也将被删除?在
另外,如果它不是一对一的关系,假设它是一个多对一(多个待办事项对一个提醒)关系,那么如何设置模型,以便如果删除了一个Todo对象,那么提醒对象也将被删除,但前提是没有更多的Todo对象链接到该提醒?在
此外,关于:
^{pr2}$如果在表单中留空,数据库中存储的默认值是什么?在
你在定义关系
这里指定
on_delete=models.SET_NULL
。这告诉django在删除被引用对象时将字段设置为NULL。如果您也要删除对象,请使用models.CASCADE
。Django使用这个作为默认值。在更多参考here
^{pr2}$如果未指定任何内容,则不会设置此字段,并且此字段将为空,则此字段没有默认值。在
如注释中所述,如果要在删除}类中。在
Reminder
对象时将相应Todo
对象中的reminder字段设置为NULL
,那么可以将OneToOne
关系字段放在Reminder
类中,而不是{作为它的一对一的关系,根据django ORM,当你放入其中任何一个类时,它是相同的。您将通过两个对象的属性来访问它。在
对于多对一,您必须使用前-后删除信号。但信号有其自身的局限性
相关问题 更多 >
编程相关推荐