【发布时间】:2021-09-20 17:29:35
【问题描述】:
我有两个模型,电影和评论。 Review 有一个与 Movie 相关的外键字段。我一直在尝试编辑与 Movie 实例关联的 Review 对象。
models.py
class Movie(models.Model):
title = models.CharField(max_length=160)
class Review(models.Model):
movie = models.ForeignKey(Movie, on_delete=models.CASCADE, related_name='reviews')
author = models.CharField(max_length=150)
active = models.BooleanField(default=True)
views.py
# Create and save movie object
movie = Movie(title="Nightcrawler")
movie.save()
# Create and save two review objects
review1 = Review(movie=movie, author="John", active=True)
review2 = Review(movie=movie, author="Rob", active=False)
review1.save()
review2.save()
print("Before: " + movie.title + " has " + str(len(movie.reviews.all())) + " reviews.")
active_reviews = movie.reviews.filter(active=True)
print("There are " + str(len(active_reviews)) + " active reviews.")
movie.reviews.set(active_reviews)
movie.reviews.first().author = "Abby"
# Try and save both objects just for good measure.
# Not sure if it is necessary to do this. Does not
# seem to work anyway
movie.reviews.first().save()
movie.save()
print("After: " + movie.title + " has " + str(len(movie.reviews.all())) + " reviews.")
print("Author of the first review is: " + str(movie.reviews.first().author))
views.py代码的输出如下:
Before: Nightcrawler has 2 reviews. There are 1 active reviews. After: Nightcrawler has 2 reviews. Author of the first review is: John
我希望并期望保存对movies.reviews 所做的更改,但输出显示set() 方法或更改作者值实际上都不会更改 Movie 实例。为什么没有保留这些编辑?
有趣的是,movies.reviews.first().delete() 行似乎确实删除了第一个评论。我很好奇为什么这有效而其他更改无效。
感谢您的宝贵时间!
【问题讨论】:
标签: python django foreign-keys