Django中的ModelForm不保存任何内容

时间:2020-05-04 08:26:04

标签: django django-models django-forms django-views

我正在用Django开发一个Twitter克隆应用程序。我有一个模型,也有一个模型表单:

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 个答案:

答案 0 :(得分:1)

您不会从clean函数返回已清理的表单数据,因为clean函数如果通过验证不会返回任何内容,则会将None / Null保存到DB。

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