我有以下模式:
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对象中的提醒字段被设置为Null,这正是我想要的。
我需要知道的是:
如何设置这些模型,以便如果删除Todo对象,相应的提醒对象也将被删除?
另外,如果它不是一对一的关系,假设它是一对一的关系(很多Todo's到一个提醒)关系,如何设置模型以便如果删除Todo对象,提醒对象也会被删除,但只有当没有更多的Todo对象链接到提醒时?
此外,在以下方面:
stop_time = models.DateTimeField(blank=True)如果表单中为空白,那么在数据库中存储的默认值是什么?
发布于 2014-08-18 04:38:38
你把这种关系定义为
reminder = models.OneToOneField(Reminder, blank=True, null=True,
on_delete=models.SET_NULL)这里指定的是on_delete=models.SET_NULL。这告诉django在删除引用对象时将字段设置为NULL。如果您也想删除对象,请使用models.CASCADE。Django将此用作默认值。
更多参考这里
stop_time = models.DateTimeField(blank=True)如果未指定此字段,则此字段将为空,因此不存在默认值。
正如注释中提到的,如果要在删除Todo对象时将相应的Reminder对象中的提醒字段设置为NULL,则可以将OneToOne关系字段放在Reminder类中而不是Todo类中。
作为它的onetoone关系,如per,ORM在输入任何一个类时都是相同的。您将通过两个对象的属性访问它。
对于多对一,你将不得不使用前删除信号。但是信号也有自己的局限性。
https://stackoverflow.com/questions/25353339
复制相似问题