如何在django中获取翻译记录
我是django框架的新手,mysql数据库中有3个表。我想从带有翻译表和图像表的主表中获取数据。 我的模特如何在django中获取翻译记录,django,python-3.x,Django,Python 3.x,我是django框架的新手,mysql数据库中有3个表。我想从带有翻译表和图像表的主表中获取数据。 我的模特 class Country(models.Model): #id = models.IntegerField(primary_key=True) iso_code = models.CharField(max_length=2, unique=True) slug = models.CharField(max_lengt
class Country(models.Model):
#id = models.IntegerField(primary_key=True)
iso_code = models.CharField(max_length=2, unique=True)
slug = models.CharField(max_length=255, unique=True)
is_featured = models.IntegerField(max_length=1)
class Meta:
db_table = 'rh_countries'
class CountryTranslation(models.Model):
country_id = models.ForeignKey(Country, on_delete=models.CASCADE)
name = models.CharField(max_length=255)
description = models.TextField(blank=True, null=True)
locale = models.CharField(max_length=2)
class Meta:
db_table = 'rh_countries_translations'
class CountryImage(models.Model):
country_id = models.ForeignKey(Country, on_delete=models.CASCADE)
image = models.CharField(max_length=255)
is_main = models.IntegerField(max_length=1)
class Meta:
db_table = 'rh_country_images'
现在我想按地区和相关图像获取所有具有翻译记录的国家。
如果有人知道,请给出解决方案。您可以通过使用筛选和注释来完成此操作:
from django.db.models import F
Country.objects.filter(
countrytranslation__locale=mylocale
).annotate(
name=F('countrytranslation__name')
)
这将导致查询集
包含所有国家/地区
s(对于给定的mylocale
,具有翻译
)。这些Country
s将具有一个额外属性.name
,即国家的翻译名称
因此,如果存在翻译,那么对于mylocale='en'
,这将导致QuerySet
,带有国家(name='Germany',iso_code='de')
,对于mylocale='de'
,它将导致国家(name='Deutschland',iso_code='de')
(这是一种特殊的格式,用来演示它是如何工作的)
注意:外键
通常不会以\u id
结尾。Django将自动向数据库列添加\u id
后缀。外键本身在Python/Django级别,表示为延迟加载的属性
请将您的外键重命名为country
,而不是country\u id
。Django将自动使用外键的id
创建一个额外的country\u id
列。@raj:您需要从Django.db导入它…。models import F
。出现另一个错误,无法将关键字“country\u translation”解析为field、 选择包括:countryimage、countrytranslation、id、is_特色、iso_代码、,slug@Raj:如果您查看这些选项,很明显下划线是一个错误:)QuerySet.annotate()收到了非表达式:Country对象(countrytranslation\uu名称)。yes收到了另一个错误--QuerySet.annotate()收到了非表达式:国家/地区对象(国家/地区名称)。