我是django框架的新手。我在mysql数据库中有3个表。我想从具有翻译表和图像表的主表中获取数据。 我的模型。py
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'
现在,我想按语言环境和相关图像获取带有翻译记录的所有国家/地区。 如果有人知道,请提供解决方案。
答案 0 :(得分:0)
您可以通过使用过滤来进行此操作,然后进行注释:
from django.db.models import F
Country.objects.filter(
countrytranslation__locale=mylocale
).annotate(
name=F('countrytranslation__name')
)
这将导致具有所有QuerySet
的{{1}}(对于给定的Country
具有Translation
)。这些mylocale
将具有一个额外的属性Country
,它是.name
的翻译名称。
因此,如果存在翻译,则对于Country
,这将导致mylocale='en'
和QuerySet
,对于Country(name='Germany', iso_code='de')
,将导致{{1 }}(这里是一种 ad hoc 格式,以演示其工作原理)。
注意:
mylocale='de'
通常不以Country(name='Deutschland', iso_code='de')
结尾。 Django会自动在数据库列中添加一个ForeignKey
后缀。外键本身在Python / Django级别上表示为延迟加载的属性。