标签: django-parler

如何使用石墨烯查询可翻译字段

假设一个模型翻译了如下字段,我们如何使用 django-graphene 查询这些字段?

from parler.models import TranslatableModel, TranslatedFields

class Article(TranslatableModel):
    #regular fields
    publishing_date = models.DateTimeField(_('publishing date'),
                                           default=now)
    # translated fields
    translations = TranslatedFields(
        title=models.CharField(_('title'), max_length=234),
        slug=models.SlugField(
            verbose_name=_('slug'),
            max_length=255,
            db_index=True,
            blank=True,
        ),
        meta_title=models.CharField(
            max_length=255, verbose_name=_('meta title'),
            blank=True, default=''),
        meta_description=models.TextField(
            verbose_name=_('meta description'), blank=True, default=''),
        meta_keywords=models.TextField(
            verbose_name=_('meta keywords'), blank=True, default=''),
    )
Run Code Online (Sandbox Code Playgroud)

为了注册“未知”字段,我执行以下操作:

@convert_django_field.register(GeopositionField)
def convert_geofield_to_string(field, registry=None):
     return graphene.String(description=field.help_text, required=not field.null)
Run Code Online (Sandbox Code Playgroud)

……但这在这里行不通。有任何想法吗?

django django-parler graphene-python

5
推荐指数
0
解决办法
228
查看次数

admin中的可翻译Manytomany字段会生成许多查询

我正在使用django-parler(django-hvad的衍生物)进行翻译.在管理员显示具有多种关系的Foreignkey字段时,django为每个字段运行一个查询:

change_clinic__english____django_suit

change_clinic__english____django_suit

因此,当有300个服务时,会有尽可能多的查询.

我认为get_queryset上的prefetch_related不适用于mantomany过滤器/列表,如果我错了,请纠正我:

def get_queryset(self, request):
    return super(DoctorAdmin, self).get_queryset(request).prefetch_related('translations', 'services__translations')
Run Code Online (Sandbox Code Playgroud)

对查询数量没有影响.启用缓存上parler(如笔者建议在这里)也于事无补,因为相同的查询不重复,但这些过滤器的每一项被称为在翻译项目查询(IDS每一次都是不同的).所以,我要找的是内部过滤器上的select_related/prefetch_related.如果您已经解决了这个问题,我也会同时审核您的应用程序.

python django django-admin django-hvad django-parler

4
推荐指数
1
解决办法
1247
查看次数

django parler 创建测试对象

我有使用 Django Parler 具有可翻译字段的模型,现在我正在尝试创建用于单元测试的对象。这是我拥有的示例模型

class Federation(TranslatableModel):
    translations = TranslatedFields(
        name = models.CharField('name', max_length=50)
    )
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    creator = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True, related_name='federation_creator')
    updater = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True, related_name='federation_updater')

    def __str__(self):
        return self.name;
Run Code Online (Sandbox Code Playgroud)

现在我想在测试用例的设置阶段创建用于测试的对象:

 Federation.objects.create(...)
Run Code Online (Sandbox Code Playgroud)

但我不知道如何创建具有可翻译字段的对象。

我怎样才能做到这一点?

python django unit-testing django-parler

2
推荐指数
1
解决办法
833
查看次数

django-parler 在管理中不显示标签

出于某种原因,我在添加到管理员时没有看到任何语言选项卡。我正在使用 Django 1.9.10。我正在使用 django-hvad 但决定尝试 parler。我在一个新项目中尝试了完全相同的代码并且它有效,但在我现有的项目中却没有。请注意,我也在使用 django-mptt。在与 mptt 模型不同的模型中尝试 parler,反之亦然。

settings/base.py

# Translations
gettext = lambda s: s
LANGUAGES = (
    ('en', gettext('English')),
    ('ar', gettext('Arabic')),
)

LOCALE_PATHS = (
    os.path.join(BASE_DIR, "locale"),
)

# # Parler Configuration
PARLER_LANGUAGES = {
    None: (
        {'code': 'ar', },
        {'code': 'en',},
    ),
    'default': {
        'fallback': 'ar',             # defaults to PARLER_DEFAULT_LANGUAGE_CODE
        'hide_untranslated': False,   # the default; let .active_translations()       return fallbacks too.
    }
}
PARLER_DEFAULT_LANGUAGE_CODE = 'ar'
Run Code Online (Sandbox Code Playgroud)

模型

class Category(MPTTModel, TranslatableModel):
    slug = models.SlugField(max_length=50, unique=True, null=True, blank=True) …
Run Code Online (Sandbox Code Playgroud)

django django-mptt django-parler

2
推荐指数
1
解决办法
1176
查看次数