首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将删除从子级添加到父级

问如何将删除从子级添加到父级
EN

Stack Overflow用户
提问于 2014-08-17 20:29:58
回答 1查看 848关注 0票数 1

我有以下模式:

代码语言:javascript
复制
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对象链接到提醒时?

此外,在以下方面:

代码语言:javascript
复制
stop_time = models.DateTimeField(blank=True)

如果表单中为空白,那么在数据库中存储的默认值是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-18 04:38:38

你把这种关系定义为

代码语言:javascript
复制
    reminder = models.OneToOneField(Reminder, blank=True, null=True,
                 on_delete=models.SET_NULL)

这里指定的是on_delete=models.SET_NULL。这告诉django在删除引用对象时将字段设置为NULL。如果您也想删除对象,请使用models.CASCADE。Django将此用作默认值。

更多参考这里

代码语言:javascript
复制
stop_time = models.DateTimeField(blank=True)

如果未指定此字段,则此字段将为空,因此不存在默认值。

正如注释中提到的,如果要在删除Todo对象时将相应的Reminder对象中的提醒字段设置为NULL,则可以将OneToOne关系字段放在Reminder类中而不是Todo类中。

作为它的onetoone关系,如per,ORM在输入任何一个类时都是相同的。您将通过两个对象的属性访问它。

对于多对一,你将不得不使用前删除信号。但是信号也有自己的局限性。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25353339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档