【发布时间】:2015-11-18 07:44:18
【问题描述】:
一段时间以来,我一直在努力寻找问题的答案,但找不到我真正需要的答案。
我最近开始搞乱 Django(我已经搜索了文档),直到现在一切都很好。我正在制作一个简单的画廊应用程序,想法很简单,每张图片都有一堆标签。我想建立一个标签列表(那里没问题),然后选择一个标签 - 获取所有图像的相关标签列表 - 我有一个问题,看看我的视图代码:
def getTagList(request):
images = Image.objects.all()
imgsWithTag = images.filter(tags__name__in=["space"]).only('tags')
allTags = imgsWithTag.values_list('tags__name', flat=True)
在这里 - 我希望 allTags 是所有图像标签的列表(包括示例中的“空格”) - 相反我得到:
[u'space', u'space']
对于我在数据库中的两个图像。每张图片都包含两个标签(“空格”是常见的标签),但据我所知,只有“匹配”标签被返回。
这里到底发生了什么以及如何避免它?有没有更好的方法来做我想做的事?
我的模型如下:
class Tag(models.Model):
name = models.CharField(max_length=60, primary_key=True)
def __unicode__(self):
return self.name
class Image(models.Model):
title = models.CharField(max_length=60)
image = models.ImageField(upload_to="images/")
tags = models.ManyToManyField(Tag, blank=True)
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
def thumbnail(self):
return '<img src="%s" height="40" />' % (self.image.url)
thumbnail.short_description = 'Image'
thumbnail.allow_tags = True
def get_tags(self):
return ", ".join([x.name for x in self.tags.all()])
def url(self):
return self.image.url
def __unicode__(self):
return self.title
谢谢。
【问题讨论】:
标签: django filter models manytomanyfield