background: use django-hvad , have translatablemodel. in translatedfields have slug attribute should automatically created using title attribute while saving model.
problem: difficult set value of 1 of translatedfields while saving instance. solution works override save_translations method of translatablemodel follows. second last line differs original:
@classmethod def save_translations(cls, instance, **kwargs): """ following copied pasted 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 # following line different original. trans.slug = defaultfilters.slugify(trans.title) trans.save() this solution not nice, because makes use of copy , paste. there better way achieve same?
the following answer assumes using admin system auto-generate slug title. may or may not exact situation may relevant.
this extension of explanation within django-hvad project pages.
the way implement feature within the admin.py file within app. need extend __init__() method of translatableadmin class.
say, example, model called entry. simplified code in models.py along lines of following:
from django.db import models 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') your corresponding admin.py file should follows:
from django.contrib import admin hvad.admin import translatableadmin .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)
Comments
Post a Comment