代码之家  ›  专栏  ›  技术社区  ›  Raj

如何在django中获取翻译记录

  •  0
  • Raj  · 技术社区  · 6 年前

    我是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 回复  |  直到 6 年前
        1
  •  0
  •   willeM_ Van Onsem    6 年前

    您可以使用筛选和注释来完成此操作:

    from django.db.models import F
    
    Country.objects.filter(
        countrytranslation__locale=mylocale
    ).annotate(
        name=F('countrytranslation__name')
    )

    这将导致 QuerySet 全部 Country 有一个 Translation mylocale ). 这些 国家 s将有一个额外属性 .name 这是翻译的名字

    既然存在翻译,那么 mylocale='en' ,这将导致 查询集 ,与 Country(name='Germany', iso_code='de') mylocale='de' ,将导致 Country(name='Deutschland', iso_code='de') (这有点像 临时的 格式,以演示其工作原理)。

    注意 : ForeignKey 通常是这样的 结束于 _id . Django将自动添加 _身份证 数据库列的后缀。外键本身位于Python/Django级别,表示为延迟加载属性。