ModelForm в Django ничего не экономит - PullRequest
0 голосов
/ 04 мая 2020

Я создаю твиттер-клон в Django. У меня есть модель и модель формы, как это:

Class Tweet(models.Model):
    content = models.TextField(blank=True, null=True)
    image = models.FileField(upload_to='images/', blank=True, null=True)

class TweetForm(forms.ModelForm):
    class Meta:
        model = Tweet
        fields = ['content',]

    def clean_content(self):
        content = self.cleaned_data.get('content')
        if len(content) > MAX_TWEET_LENGTH:
            raise forms.ValidationError('This tweet is too long')

У меня есть представление для этого:

def tweet_create_view(request, *args, **kwargs):
    if request.method == 'POST':
        form = TweetForm(request.POST or None)
        if form.is_valid():
            instance = form.save(commit=False)
            instance.save()
    form = TweetForm()

    context = {
        'form': form
    }

    return render(request, 'components/form.html', context)

и шаблон:

<form method="POST">
    {% csrf_token %}
    {{ form.as_p }}
    <button class="btn btn-secondary" type="submit">Save</button>
</form>

Когда Я отправляю данные формы, в базе данных значение отображается как NULL, даже если я передаю какой-то текст. Что я делаю не так ??

1 Ответ

1 голос
/ 04 мая 2020

Вы не возвращаете очищенные данные формы из функции очистки, так как ваша функция очистки ничего не возвращает, если она проходит проверку, она сохраняет None / Null в БД.

def clean_content(self):
    content = self.cleaned_data.get('content')
    if len(content) > MAX_TWEET_LENGTH:
        raise forms.ValidationError('This tweet is too long')
    return content
...