У меня есть следующие модели:Удаление связанных объектов удаляет объект ForeignKey
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()
Я думал, что QuerySet был ленивым, так, может быть, мне нужно, чтобы оценить его перед удалением, чтобы я напечатал его, и это не сработало.
print questions
questions.delete()
Я знаю, что делает ForeignKey Nullable бы предоставить мне методы, как ясно и удалить, но я не хочу, чтобы это сделать, потому что я не хочу никаких осиротевших вопросы пользователей.
Я обновил 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)
Я выбежала makemigrations
и migrate
, но когда я побежал запрос ниже на вопрос модели еще удален.
user.questions.all().delete()
Я пробовал это, и это не сработало для меня. Я думаю, что models.SET_NULL требует, чтобы поле было нулевым, а on_delete, похоже, относится только к одной стороне отношения. Поэтому, когда я удаляю вопрос, я могу сохранить ответы, но моя проблема в том, что когда я удаляю ответы, я хочу оставить вопрос. – Crystal
Удаление вопроса и сохранение ответа - это поведение по умолчанию, я забыл, что для этого поля нужно «null = True», обновил ответ. Это имеет смысл, потому что при удалении ответа поле внешнего ключа должно быть пустым –
Также не забудьте запустить 'makemigration' и' migrate' –