gpt4 book ai didi

django-hvad - 我应该如何在保存模型实例时设置翻译字段值?

转载 作者:行者123 更新时间:2023-12-03 16:17:35 24 4
gpt4 key购买 nike

背景:我用 django-hvad并有一个 TranslatableModel .在其 TranslatedFields我有一个 slug应该使用 title 自动创建的属性保存模型时的属性。

问题:很难设置 TranslatedFields 之一的值保存实例时。一个有效的解决方案是覆盖 save_translations我的方法TranslatableModel如下。只有倒数第二行与原始行不同:

    @classmethod
def save_translations(cls, instance, **kwargs):
"""
The following is copied an pasted from the TranslatableModel class.
"""
opts = cls._meta
if hasattr(instance, opts.translations_cache):
trans = getattr(instance, opts.translations_cache)
if not trans.master_id:
trans.master = instance
# The following line is different from the original.
trans.slug = defaultfilters.slugify(trans.title)
trans.save()

这个解决方案并不好,因为它使用了复制和粘贴。有没有更好的方法来实现相同的目标?

最佳答案

以下答案假设您使用管理系统自动生成 slug来自 title .这可能是也可能不是您的确切情况,但它可能是相关的。

这是 explanation 的扩展在 Django-hvad 项目页面中。

实现您的功能的方法在 admin.py 中应用程序中的文件。您需要扩展 __init__() TranslatableAdmin的方法类(class)。

例如,假设您的模型名为 Entry . models.py中的简化代码可能遵循以下原则:

from django.db import models
from hvad.models import TranslatableModel, TranslatedFields

class Entry(TranslatableModel):
translations = TranslatedFields(
title=models.CharField(max_length=100,),
slug=models.SlugField(),
meta={'unique_together': [('language_code', 'slug')]},
)
def __unicode__(self):
return self.lazy_translation_getter('title')

您对应的 admin.py文件应如下所示:
from django.contrib import admin

from hvad.admin import TranslatableAdmin

from .models import Entry

class EntryAdmin(TranslatableAdmin):
def __init__(self, *args, **kwargs):
super(EntryAdmin, self).__init__(*args, **kwargs)
self.prepopulated_fields = {'slug': ('title',)}

admin.site.register(Entry, EntryAdmin)

关于django-hvad - 我应该如何在保存模型实例时设置翻译字段值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17657914/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com