I have the following models:
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')
When I run the query below the user model is also deleted
user.questions.all().delete()
Is there any way to delete the questions without deleting the user?
I tried iterating over the questions and that didn't work
questions = user.questions.all()
for an in questions:
answer.delete()
I thought the queryset was lazy so maybe I needed to evaluate it before deleting so I printed it and this did not work.
print questions
questions.delete()
I know that making the ForeignKey nullable would provide me with methods like clear and remove but I did not want to do this because I did not want any orphaned user questions.
I updated the ForeignKey as follows
class UserQuestion(models.Model):
answer = models.CharField(max_length=255)
user = models.ForeignKey(User, related_name='questions', null=True, on_delete=models.SET_NULL)
I ran makemigrations
and migrate
but when I ran the query below The question model was still deleted.
user.questions.all().delete()
question = models.ForeignKey(Question, related_name='answers', on_delete=models.SET_NULL, null=True)
untested, but should work.
Your issue is a DB related issue, when deleting a foreignkey the DB will try to delete the related row.
Read more on the other options on this great answer.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With