2017-02-08 8 views
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を更新し、私はmakemigrationsmigrateを走ったが、私が実行したときに、質問モデル以下のクエリは、まだ削除されました。

user.questions.all().delete() 

答えて

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

テストされていないが、動作するはずです。

問題はDB関連の問題です。外部キーを削除すると、DBは関連する行を削除しようとします。

this great answerのその他のオプションについては、こちらをご覧ください。

+0

私はこれを試してみて、それは私にとってはうまくいかなかった。私はmodels.SET_NULLはフィールドがnull可能であることを必要とし、on_deleteは関係の片側を参照するように見えると思います。だから私は質問を削除するときに私は答えを保持することができますが、私の問題は、私が答えを削除するときに私は質問を維持したいということです。 – Crystal

+0

質問を削除して答えを保持するのがデフォルトの動作です。フィールドに 'null = True'が必要であることを忘れて、答えを更新しました。これは意味があります。なぜなら、回答を削除するときには、外部キーフィールドはヌルでなければならないからです。 –

+0

また、 'makemigration'と' migrate'を実行することを忘れないでください。 –

関連する問題