这是我的 Django models.py
:
from django.db import models
class Blog(models.Model):
pub_date = models.DateTimeField('date published')
def __str__(self):
return self.pub_date
class LanguagesCode(models.Model):
code = models.CharField(max_length=5)
def __str__(self):
return self.code
class BlogTranslation(models.Model):
name = models.CharField(max_length=250)
content = models.TextField(blank=True, null=True)
blog_id = models.ForeignKey(Blog, related_name='translations', on_delete=models.CASCADE)
language_code = models.ForeignKey(LanguagesCode, related_name='languages', on_delete=models.DO_NOTHING)
class Meta:
unique_together = ('blog_id', 'language_code')
def __str__(self):
return self.name
我想显示有英文翻译、英文名称的博客列表。 我需要如何编写查询来获取此数据:
[
{
"name": "1st Blog name in english",
"content": "content in english",
"pub_date": "XXX"
},
{
"name": "2nd Blog name in english",
"content": "content in english",
"pub_date": "XXX"
},
]
我使用 Django 4 和 Django Rest Framework。我希望我的查询从博客模型开始。
这是我最好的尝试,但没有给我想要的结果:
Blog.objects.filter(translations__id = 2)
最佳答案
您可以使用values()
所以:
BlogTranslation.objects.filter(language_code__code='en').values('name', 'content', 'blog_id__pub_date')
然后只需序列化即可得到JSON格式的数据。
编辑
要从博客
模型查询,请使用 Q()
对象如此:
from django.db.models import Q
blogs = Blog.objects.filter(
translations__language_code__code='en'
).values(
'translations__name',
'translations__content',
'pub_date'
).distinct()
关于python - Django 查询集显示英文翻译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75561763/