1
私は、次のモデルがあります:私もはForeignKeyのオブジェクトを削除します
user.questions.all().delete()
を削除されたユーザモデル以下のクエリを実行すると
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')
質問を削除するには、どのような方法がありますがユーザーを削除することなく?
は、私が質問を反復処理しようと、それはquestions = user.questions.all()
for an in questions:
answer.delete()
動作しませんでした私は多分、私はそれを印刷し、これは動作しませんでしたので、削除する前に、それを評価するために必要なクエリセットは怠け者だと思いました。
print questions
questions.delete()
私はのForeignKeyのNULL可能を作ることは明らかのような方法を私に提供し、除去するであろうことを知っているが、私はすべての孤立ユーザーの質問をしたくなかったので、私はこれを行うにはしたくありませんでした。
class UserQuestion(models.Model):
answer = models.CharField(max_length=255)
user = models.ForeignKey(User, related_name='questions', null=True, on_delete=models.SET_NULL)
を次のように私はのForeignKeyを更新し、私はmakemigrations
とmigrate
を走ったが、私が実行したときに、質問モデル以下のクエリは、まだ削除されました。
user.questions.all().delete()
私はこれを試してみて、それは私にとってはうまくいかなかった。私はmodels.SET_NULLはフィールドがnull可能であることを必要とし、on_deleteは関係の片側を参照するように見えると思います。だから私は質問を削除するときに私は答えを保持することができますが、私の問題は、私が答えを削除するときに私は質問を維持したいということです。 – Crystal
質問を削除して答えを保持するのがデフォルトの動作です。フィールドに 'null = True'が必要であることを忘れて、答えを更新しました。これは意味があります。なぜなら、回答を削除するときには、外部キーフィールドはヌルでなければならないからです。 –
また、 'makemigration'と' migrate'を実行することを忘れないでください。 –