删除相关对象会删除ForeignKey对象

时间:2017-02-08 21:40:06

标签: django python-2.7 django-1.7

我有以下型号:

class User(models.Model):
      user_question = models.ForeignKey(UserQuestion)

class Question(models.Model):
      text = models.CharField(max_length=255)

class UserQuestion(models.Model):
      answer = models.CharField(max_length=255)
      question = models.ForeignKey(Question)
      user = models.ForeignKey(User, related_name='questions')

当我在下面运行查询时,用户模型也会被删除

user.questions.all().delete()

有没有办法在不删除用户的情况下删除问题?

我试过迭代问题并且没有工作

questions = user.questions.all()
for an in questions:
     answer.delete()

我认为查询集是懒惰的,所以也许我需要在删除之前对其进行评估,所以我打印它并且这不起作用。

print questions
questions.delete()

我知道使ForeignKey可以为空可以为我提供清除和删除等方法,但我不想这样做,因为我不想要任何孤立的用户问题。

我更新了ForeignKey,如下所示

class UserQuestion(models.Model):
  answer = models.CharField(max_length=255)
  user = models.ForeignKey(User, related_name='questions', null=True, on_delete=models.SET_NULL)

我运行了makemigrationsmigrate但是当我运行下面的查询时问题模型仍然被删除。

user.questions.all().delete()

1 个答案:

答案 0 :(得分:1)

question = models.ForeignKey(Question, related_name='answers', on_delete=models.SET_NULL, null=True)

未经测试,但应该有效。

您的问题是与数据库相关的问题,当删除外键时,数据库将尝试删除相关行。

详细了解this great answer上的其他选项。