【发布时间】:2017-12-10 22:27:40
【问题描述】:
我有三个主要模型,Picture、Place 和 PlaceRating:
class Picture(models.Model):
file = ImageField(max_length=500, upload_to="images")
user = models.ForeignKey(User, null=True, related_name="userpictures")
place = models.ForeignKey(Place, null=True, related_name='pictures')
class PlaceRating(models.Model):
place = models.ForeignKey(Place, null=True, related_name="placeratings")
user = models.ForeignKey(User, null=True, related_name="userratings")
rating = models.DecimalField(null=True, max_digits=4, decimal_places=1)
class Place(models.Model):
name = CharField(max_length=50)
我想显示用户给出的地点评级以及地点的图像,但我无法做到这一点,因为我需要过滤 ForeignKey 而 Django 似乎不允许这样做。
我想做的例子:
查看:
pictures = Picture.objects.filter(user=request.user)
模板:
{% for picture in pictures %}
<img src="{{ picture.file.url }}" class="bigpicture">
{{ picture.place.placeratings.0.rating|user:picture.user }}
{% endfor %}
关于信息,我设法使用模板标签来做到这一点,但这会对数据库产生很多我无法预取的不同查询..:
{% for picture in pictures %}
<img src="{{ picture.file.url }}">
{% getplaceratingrelatedtopic picture.place.id picture.user.id %}
{% endfor %}
还有:
@register.simple_tag
def getplaceratingrelatedtopic(placeid, userid):
print(placeid)
theplace = Place.objects.get(id=placeid)
user = User.objects.get(id=userid)
placerating = PlaceRating.objects.filter(author=user, place=place).last()
if rating:
return placerating.rating
else:
return ""
我使用 Python 2.7/Django 1.9。
有什么线索吗?非常感谢!
【问题讨论】:
标签: python django tags django-queryset prefetch