Django ModelForm;用户,此字段是必填项

时间:2016-01-25 11:32:44

标签: python django django-forms

我遇到了一些只包含一个按钮的(模型)表单问题。当我尝试提交表单时,会显示以下消息:

  

用户   此字段是必填字段。

ModelForm看起来像这样:

from django.forms import ModelForm
from .models import HulpOproep


class HulpOproepForm(ModelForm):
    class Meta:
        model = HulpOproep
        fields = ['user', ]

模型看起来像这样:

class HulpOproep(models.Model):
    user = models.ForeignKey(User)

    time = models.DateTimeField(auto_now_add=True, verbose_name='Tijd')

    def __str__(self):
        return '%s %s' % (self.user.username, str(self.time))

    def username(self):
        return self.user.username

    def first_name(self):
        return self.user.first_name

    def last_name(self):
        return self.user.last_name

    class Meta:
        verbose_name = 'Hulp Oproep'
        verbose_name_plural = 'Hulp Oproepen'

View看起来像这样:

def verzend_oproep(request):
    if request.method == 'POST':
        form = HulpOproepForm(request.POST)
        if form.is_valid():
            oproep = form.save(commit=False)
            oproep.user = request.user
            oproep.save()
            return redirect('portal/index/')
    else:
        form = HulpOproepForm()
    return render(request, 'portal/verzend_oproep.html', {'form': form})

模板:

{% extends "base.html" %}
{% block head %}
    <title>Zorggroep | Hulp Oproep</title>
{% endblock %}

{% block body%}
    <h1>Verstuur Hulpoproep</h1>
    <form method="POST" class="post-form">{% csrf_token %}
        {{ form.as_P }}
        {{ form.errors }}
        <button type="submit" class="save btn btn-default">Verstuur</button>
    </form>
{% endblock %}

HulpOproep模型中的'user'是ForeignKey,应该是当前登录用户的User对象。我尝试使用以下行来指定:

oproep.user = request.user

那么应该发生的是: 获取当前用户的“用户”对象并将其用作“HulpOproepForm.user”。这样'HulpOproepForm.user'就是'HulpOproep.user'和一个外键。

我已经按照多个教程进行了搜索,但我找不到解决方案。如果答案是合乎逻辑的,我很抱歉,但我一直只使用Django 5天,并且有1.5个月的编程经验。

谢谢!

1 个答案:

答案 0 :(得分:0)

感谢PatNowak和Radek!

我不知道表单是在等待用户输入而不是代码输入。我设法通过向ModelForm添加exclude来修复它。

class HulpOproepForm(ModelForm):
    class Meta:
        model = HulpOproep
        exclude = ['user', 'time']