-1

我有一个模型,如下所示:

class MyModel(TranslatableModel):
    date_created = models.DateField(
        verbose_name=_('Date Created'), default=timezone.now)
    source = models.CharField(max_length=100, verbose_name=('Type'))
    translations = TranslatedFields(
        name=models.CharField(verbose_name=_('Name'), max_length=200)
    )

我想在这个模型上使用 update_or_create 函数;我想获取具有给定 ID 和来源的记录;如果它存在,我想用 3 种不同的语言更新它的名称。否则我想创建一个新记录。我使用了以下代码。我试过 name_en、name__en、translations__name_en;他们都没有工作。我还尝试了 get_or_create 函数,但他们都没有使用它。

obj, created = MyModel.objects.update_or_create(
                                            id= id,
                                            source = 'tmp',
                                            defaults={
                                                    'name_en': en_name,
                                                    'name_fi': fi_name,
                                                    'name_sv': sv_name,
                                             })

我不想分别使用 get 函数和 create 函数。我想知道如何通过 update_or_create 函数或 get_or_create 函数访问 django 翻译的字段。有人可以帮我解决这个问题吗?

我的 Django 版本:Django==1.11.17

4

1 回答 1

1

update_or_create创建对象/更新对象字段,它不是为在相关模型上创建相关模型/更新字段而构建的

这意味着作为样板代码的快捷方式。例如:

defaults = {'first_name': 'Bob'}
try:
    obj = Person.objects.get(first_name='John', last_name='Lennon')
    for key, value in defaults.items():
        setattr(obj, key, value)
    obj.save()
except Person.DoesNotExist:
    new_values = {'first_name': 'John', 'last_name': 'Lennon'}
    new_values.update(defaults)
    obj = Person(**new_values)
    obj.save()

正如记录的那样

在内部,django-parler 将翻译后的字段存储在一个单独的模型中,每种语言一行。

从源代码也可以看到

于 2021-01-08T10:11:17.610 回答