簡體   English   中英

django模型:檢索與外鍵相關的數據作為響應中的列表

[英]django models: retrieve foreign key related data as a list inside a response

我必須建模:問題和標簽,它們之間具有“多對多”關系。

 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'}

很好的問題,我想您可以嘗試使用以下方法:

questions = Question.objects.filter(is_active__exact=True).prefetch_related('tags')
[{'id': question.id, 'title': question.title, 'tags': [tag.id for tag in question.tags.all()]} for question in questions]

有關prefetch_relatedList Comprehension的更多信息。

快樂的編碼;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM