Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 26, 2014 23:02:02

Oik741
Зарегистрирован: 2013-01-06
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

ModelForm дополнительное поле

Всем привет!
создаю ModelForm с дополнительным полем:

class KeySetForm(ModelForm):
    key_file = FileField()
    def clean_title(self):
        title = self.cleaned_data['title']
        if KeySet.objects.get(title=title):
            raise ValidationError('"%s" title is not uniq' % title)
        return title
    class Meta:
        model = KeySet
        fields = ('title',)
        widgets = {
            'title': TextInput(),
        }

Модель:
class KeySet(models.Model):
    title = models.CharField(max_length=32, unique=True)
    keys = models.TextField()
    quantity = models.IntegerField()
    class Meta:
        db_table = "keys"

Требуется:
Когда пользователь заполняет форму нужно считывать из файла текст и присваивать его инстансу KeySet в поле keys(ну и в quantity кол-во строк)

Как это лучше всего реализовать?
Как я уже понял clean_key_file(self) метод не подоидет, т.к. определен непосредственно в форме а не в мета классе.
Корректно ли это будет сделать метод и засунуть её к key_file как валидатор?

Офлайн

#2 Фев. 27, 2014 00:53:32

Oik741
Зарегистрирован: 2013-01-06
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

ModelForm дополнительное поле

class KeySetForm(ModelForm):
    keyfile = FileField(required=False)
    quantity = IntegerField(required=False, widget=HiddenInput())
    keys = CharField(required=False, widget=HiddenInput())
    def clean_title(self):
        title = self.cleaned_data['title']
        if KeySet.objects.filter(title=title):
            raise ValidationError('"%s" title is not uniq' % title)
        return title
    def clean_keys(self):
        file = self.files.get('keyfile')
        if file:
            return file.read()
        return self.data.get('keys')
    def clean_quantity(self):
        keys = self.cleaned_data.get('keys')
        print keys
        if keys:
            return len(keys.splitlines())
        return 0
    class Meta:
        model = KeySet
        fields = ('title', 'keys', 'quantity')
        widgets = {
            'title': TextInput(),
        }

Как временное решение реализовал вот так
Буду рад если кто скажет как такие вещи делаются правильно)

Офлайн

#3 Фев. 28, 2014 22:39:50

Oik741
Зарегистрирован: 2013-01-06
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

ModelForm дополнительное поле

Не знаю почему я уперлся в ModelForm, вообщем не нужен он там был

Считаю тему закрытой

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version