首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django-hvad -如何在保存模型实例时设置转换的字段值?

django-hvad -如何在保存模型实例时设置转换的字段值?
EN

Stack Overflow用户
提问于 2013-07-15 15:26:21
回答 2查看 2K关注 0票数 5

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

问题:在保存实例时很难设置一个TranslatedFields的值。一个可行的解决方案是覆盖我的TranslatableModelTranslatableModel方法,如下所示。只有第二行与原行不同:

代码语言:javascript
复制
    @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()

这个解决方案不太好,因为它使用复制和粘贴。是否有更好的方法来实现同样的目标?

EN

回答 2

Stack Overflow用户

发布于 2013-08-02 21:31:00

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

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

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

例如,假设您的模型名为Entrymodels.py中的简化代码可以如下所示:

代码语言:javascript
复制
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文件应该如下所示:

代码语言:javascript
复制
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)
票数 6
EN

Stack Overflow用户

发布于 2016-04-28 16:14:14

使用django-hvad 1.5.0。

用例:在Django管理之外设置TranslatableModel字段的值。

代码语言:javascript
复制
# self is a TranslatableModel instance with `translations`
# this first line will initialize the cache if necessary
slug = self.lazy_translation_getter('slug')
translation = get_cached_translation(self)
translation.master = self
translation.slug = defaultfilters.slugify(self.title)  # whatever value
translation.save()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17657914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档