由ManyToManyField_in过滤的对象不包含其余的ManyToMany字段值,如何获取它们?

时间:2015-08-24 19:06:32

标签: django filter models manytomanyfield

我一直试图找到问题的答案,但却找不到我需要的答案。

我最近开始搞乱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 成为所有图片代码的列表(包括' space'如示例所示) - 相反,我得到:

[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

谢谢。

0 个答案:

没有答案