如何在Django中获取翻译记录

时间:2018-09-07 07:44:10

标签: django python-3.x

我是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'

现在,我想按语言环境和相关图像获取带有翻译记录的所有国家/地区。 如果有人知道,请提供解决方案。

1 个答案:

答案 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级别上表示为延迟加载的属性。