如何在Django中使用表单发布登录用户的数据?

时间:2018-03-08 22:03:36

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

我正在创建一个表单,供用户在我的网络应用上预订时间。目前我有以下文件。

请参阅forms.py:

class BookingForm(forms.ModelForm):
    usname = User.username
    daterequired = forms.CharField(max_length=60, required=True)
    students = forms.CharField(max_length=60, required=True)
    length = forms.CharField(max_length=60, required=True)

    class Meta:
        model = Booking
        fields = "__all__"

参见models.py:

class Booking(models.Model):
    usname = User.username
    daterequired = models.DateField(_("Date"), default=datetime.date.today)
    students = models.CharField(max_length=200)
    length = models.CharField(max_length=40, blank=True)

请参阅views.py:

@login_required
def choose(request):
    if request.method == 'POST':
        form = BookingForm(request.POST)
        if form.is_valid():
            form = form.save(commit=False)
            form.save()
            return redirect('index')
    else:
        form = BookingForm()
    return render(request, 'choose.html', {'form': form})

我想要实现的是,当用户点击表单上的提交时,他们的用户数据会自动记录在数据库的预订表中。在那一刻,记录在表中的唯一数据是日期字段,学生和长度。我需要知道哪个用户发布了这些数据。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

First the model. The way you have defined usname is not valid. Change it to:

class Booking(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
    daterequired = models.DateField(_("Date"), default=datetime.date.today)
    students = models.CharField(max_length=200)
    length = models.CharField(max_length=40, blank=True)

Then change the form to this:

class BookingForm(forms.ModelForm):
    class Meta:
        model = Booking
        exclude = ['user', ]

You don't need to redefine fields if you use ModelForm.

Run makemigrations and migrate. Finally, change code inside choose() to:

if form.is_valid():
    form = form.save(commit=False)
    form.user = request.user
    form.save()
    return redirect('index')