从数据库中获取最新对象,而不管django中的用户是谁



我正在学习python和django,我正在编写一个类似于IMDB的项目
我使用的是python 3.8.2 64位和django 3
我想显示电影收到的最新评论,而不管是谁写的。
现在它显示用户自己的最新评价,在用户注销后,评论仍然不显示写它的用户。我试过清除缓存和历史记录,但没有帮助。这是型号:

from django.db import models
from django.contrib.auth.models import User
class Movie(models.Model):
movie_title = models.CharField(max_length=250)
movie_poster = models.ImageField(default='default.png', blank=True)
movie_short_description = models.TextField()
director = models.CharField(max_length=250)
actor1 = models.CharField(max_length=250)
actor2 = models.CharField(max_length=250)
actor3 = models.CharField(max_length=250)
actor4 = models.CharField(max_length=250)
year = models.IntegerField()
def __str__(self):
return self.movie_title + ' - ' + str(self.year)
class Review(models.Model):
movie = models.ForeignKey(Movie, on_delete=models.CASCADE)
user = models.ForeignKey(User, default = None, on_delete=models.DO_NOTHING)
score = models.IntegerField()
review_title = models.CharField(max_length=250, default="")
movie_review = models.TextField()
date = models.DateTimeField(auto_now_add=True)
class Meta:
get_latest_by = 'date'
def __str__(self):
return self.review_title

views.py

def movie_detail(request, pk):
try:
movie  = Movie.objects.get(pk=pk)
review = Review.objects.all().latest()
except Exception as e:
print(e)
return render (request, 'movies/movie_detail.html', {'movie': movie, 'review': review})

html代码:

</table>
</p>
<p>User Reviews</p>
<h3>Score: {{review.score}}  {{review.review_title}}</h3>
<h6>{{review.date}}, by {{ user.get_username }}</h6>
<p>{{review.movie_review}}</p>
<a href="{% url 'add_review' pk=movie.pk %}">Review this title</a>
</div>
</div>
{% endblock %}

我会在Movie上创建一个属性,为您提供所有评论,然后从该查询集中获取最新的Review。这里的代码:

# models.py
class Movie(models.Model):
# your other code
@property
def reviews(self) -> QuerySet:
return self.review_set.all()

# views.py
def movie_detail(request, pk):
movie = get_object_or_404(Movie, pk=pk)
latest_review = movie.reviews.latest()
# return

Ps:我会将movie_titlemovie_postermovie_short_description重命名为titlepostershort_description。很明显,Movie上的title就是电影的标题。我还强烈建议将4个actor更改为具有ManyToMany关系的单个模型(但我想您稍后会在文档中阅读(。

最新更新