Как автоматически скрыть все поля слагов в формах на основе ModelForm в Django - PullRequest
1 голос
/ 29 февраля 2012

У меня есть модель с SlugField.Значение этого поля создается при первом сохранении экземпляра модели:

from django.db import models
from django.template.defaultfilters import slugify as default_slugify

class SlugModel(models.Model):
    name = models.CharField(max_length=100)
    slug = models.SlugField(max_length=100)

    def save(self, *args, **kwargs):
        if not self.pk:
            self.slug = self.slugify(self.name)
        return super(SlugModel, self).save(*args, **kwargs)

    def slugify(self, tag):
        slug = default_slugify(tag)
        return slug

Если я использую эту модель в ModelForm, по умолчанию отображается поле слаг.

from django.forms import ModelForm

class SlugModelForm(ModelForm):
    class Meta:
        model = SlugModel

Как автоматически запретить всем ModelForms отображать все его SlugFields без указания вручную ModelForm.exclude или SlugField(editable=False) в каждой форме / поле?.

Ответы [ 2 ]

2 голосов
/ 29 февраля 2012

Я думаю, вы также можете расширить ответ Лихаса, создать базовый класс и наследовать от него:

class MyModelForm(ModelForm):
    class Meta:
    exclude = ('slug',)
    abstract = True

class AnyForm(MyModelForm):
#more here

Это еще не проверено.

2 голосов
/ 29 февраля 2012

Вы можете исключить поля в мета-классе, назначив имена полей для exclude:

class Meta:
    model = SlugModel
    exclude = ('slug',)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...