Найти - Пользователи
Полная версия: ModelForm дополнительное поле
Начало » Django » ModelForm дополнительное поле
1
Oik741
Всем привет!
создаю 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 как валидатор?
Oik741
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(),
        }

Как временное решение реализовал вот так
Буду рад если кто скажет как такие вещи делаются правильно)
Oik741
Не знаю почему я уперлся в ModelForm, вообщем не нужен он там был

Считаю тему закрытой
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB