我必须建模:问题和标签,它们之间有“多对多”的关系。
class Tag(models.Model):
title = models.CharField(max_length=120)
def __str__(self):
return self.title
class Question(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE)
tags = models.ManyToManyField(Tag, blank=True)
title = models.CharField(max_length=120)
text = models.TextField()
is_active = models.BooleanField(default=True)
creation_date = models.DateTimeField(default=datetime.now)
def __str__(self):
return self.title
class Meta:
ordering = ['-creation_date']
当我尝试时
为了获取带有相关标签的问题,我正在获取带有一个标签的问题的副本。
我就是这么想的
检索问题
:
list(Question.objects.all().filter(is_active__exact=True).values('id', 'title', 'tags'))
我得到了这样的结果
:
{'id': 3, 'tags': 1, 'title': 'question 3'}{'id': 3, 'tags': 2, 'title': 'question 3'}{'id': 2, 'tags': 2, 'title': 'question 2'}{'id': 2, 'tags': 3, 'title': 'question 2'}{'id': 1, 'tags': 1, 'title': 'question 1'}{'id': 1, 'tags': 2, 'title': 'question 1'}{'id': 1, 'tags': 3, 'title': 'question 1'}
是否有办法获取问题,以便所有与之相关的标记都以单个列表的形式出现。
类似这样:
{'id': 3, 'tags': [1, 2], 'title': 'question 3'}{'id': 2, 'tags': [2, 3], 'title': 'question 2'}{'id': 1, 'tags': [1, 2, 3], 'title': 'question 1'}