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

问题描述 投票:0回答:1

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

请参阅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})

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

有人可以帮忙吗?

django django-models django-forms django-views
1个回答
1
投票

首先是模型。您定义usname的方式无效。将其更改为:

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)

然后将表单更改为:

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

如果使用ModelForm,则无需重新定义字段。

运行makemigrationsmigrate。最后,将choose()中的代码更改为:

if form.is_valid():
    form = form.save(commit=False)
    form.user = request.user
    form.save()
    return redirect('index')
© www.soinside.com 2019 - 2024. All rights reserved.