Введите ошибку списка значений в формы, когда ManyToManyField отображается с другим типом ввода - PullRequest
0 голосов
/ 26 апреля 2020

Я изменил виджет моего ManyToManyField, теги , в моей модели на скрытый ...

class PreachingForm(ModelForm):
    class Meta:
        model = Preaching
        fields = ['title', 'text', 'date', 'privacy', 'tags']   
        widgets = {
            'title': forms.TextInput(attrs={'class': 'form-control'}),
            'date': forms.DateInput(attrs={'type': 'date', 'class': 'form-control'}),
            'tags': forms.HiddenInput(), #changed to hidden input
        }

... и в html, я поставляю скрытый ввод с разделенными запятыми значениями

<input type="hidden" name="tags" value="Tag1,Tag2" id="id_tags">

Проблема в том, что я получаю сообщение об ошибке формы, говорящее Enter a list of values, и я хочу strip (',') данные, которые я получил от скрытого ввода, чтобы он мог быть исправлен, но я понятия не имею, как это сделать.

1 Ответ

0 голосов
/ 28 апреля 2020

Моим первоначальным решением было очистить поле тега, используя

def clean_tags:
    #code here

, но оно не работало, потому что clean_tags даже не вызывается в первую очередь.

Я попытался изменить свои теги как charfield

tags = forms.CharField(required = True, max_length=255, widget=forms.HiddenInput)

, и теперь вызывается метод clean.

 def clean_tags(self):
        data = self.cleaned_data['tags']
        if data is None:
            raise 
        tags = tuple(Tag.objects.get_or_create(title=tag) for tag in tuple(data.split(',')))
        return tuple([x[0].id for x in list(tags) ])
...