Django 多语言模型/按语言过滤帖子

标签 django

有我的简单博客模型;

class Article(models.Model):

    author = models.ForeignKey("auth.User",on_delete = models.CASCADE, verbose_name="Author")
    title_en = models.CharField(max_length = 120, verbose_name="Title_En")
    title_de = models.CharField(max_length = 120, verbose_name="Title_De")
    category = models.ForeignKey('Category', on_delete = models.CASCADE, null=True, blank=True)
    content_en = RichTextField(verbose_name="Content_En")
    content_de = RichTextField(verbose_name="Content_De")
    created_date = models.DateTimeField(auto_now_add=True, verbose_name="Created Date")
    image = models.ImageField(blank=True, null=True, verbose_name="Add Photo (.jpg .png)")
    slug = models.SlugField(unique=True, max_length = 130)

    def __str__(self):
        return self.title

我使用 url 这样的语言;

domainname.com/en/ 域名.com/de/

例如,如何在domainname.com/de urls中只显示属于title_de和content_de的内容?

如何使用语言进行过滤?有一个简单的解决方案吗? (我使用 django 2.1.2。我尝试 django-modeltranslation 或其他人不工作这个 django 版本...)

谢谢...

最佳答案

您可以创建一个 descriptor class包装翻译的字段,例如,

from django.utils import translation

class TranslatedField:
    def __init__(self, field_name):
         self.partial_field_name = field_name

    def __get__(self, obj, objtype):
        return getattr(obj, self.field_name)

    def __set__(self, obj, value):
        return setattr(obj, self.field_name,  value)

    @property
    def field_name(self):
        language_code = translation.get_language()
        rerurn self.partial_field_name + '_' + language_code

class Article(models.Model):

    title_en = models.CharField(max_length=120)
    title_de = models.CharField(max_length=120)
    title = Translated Field('title')

然后你可以做

article = Article.objects.create(
    title_en='In english',
    title_de='In German'
)

print(article.title)  # 'In english'
translation.set_language('de')
print(article.title)  # 'In German'
article.title = 'In German!'
print(article.title)  # 'In German!'
translation.set_language('en')
print(article.title)  # 'In english'

(未经测试,可能有错别字)

我会使用开箱即用的东西,比如 https://github.com/deschler/django-modeltranslation

关于Django 多语言模型/按语言过滤帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53251845/

相关文章:

python - 如何根据登录用户保留 Django Rest Framework Serializer 中的特定属性?

python - Django Admin - 禁用特定模型的 'Add' 操作

python - Heroku 上的 Django : relation "app_label" does not exist

django - 使用 Django 的 RESTful URL

Django 自动化同步数据库

django - 如何在设置的 INSTALLED_APPS 中指定要使用的应用程序版本

python - 将 Stripe 导入 Django - NameError

django - 从 AbstractUser 继承的模型不会散列密码字段

sql - django:datediff sql 查询?

python - Django - 无法获取对象列表中对象的特定主键(id)