【问题标题】:Django: Queryset.clear() method on OneToOneField()Django:OneToOneField() 上的 Queryset.clear() 方法
【发布时间】:2010-01-29 18:03:01
【问题描述】:

我需要避免在外键上级联删除,但它是 OneToOneField(),例如:

class MyModel(models.Model):
    def delete(self):
        self.mysubmodel.clear()  # Breaks because self.cartitem is not a QuerySet.
        super(MyModel, self).delete()

class MySubModel(models.Model):
    mymodel = models.OneToOneField(MyModel)

这个版本可以用(但我不能用这个版本):

class MyModel(models.Model):
    def delete(self):
        self.mysubmodel_set.clear()  # Works because self.mysubmodel_set is a QuerySet.
        super(MyModel, self).delete()

class MySubModel(models.Model):
    mymodel = models.ForeignKey(MyModel)

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    在删除方法中将字段设置为 None 应该可以工作:

    self.mysubmodel = None
    

    【讨论】:

    • 这样不会造成任何问题吗?
    【解决方案2】:

    这里的预期行为是什么?我的意思是,o2o 不允许空值?

    【讨论】:

    • 你不能在 OneToOneField() 中使用 null=True 吗?
    • 行为是我正在创建一个基于项目的子项目,但该子项目有一个依赖项,因此无法删除,除非它的依赖项被删除,所以我可以' t 只是因为某个项目消失而删除了子项目。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 2013-06-25
    • 2017-07-25
    • 2019-05-02
    相关资源
    最近更新 更多