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

如何在Django中使用表单发布登录用户的数据?,django,django-models,django-forms,django-views,Django,Django Models,Django Forms,Django Views,我正在创建一个表单,供用户在我的web应用程序上预订时间。目前我有以下文件 请参阅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

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

请参阅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})
我试图实现的是,当用户在表单上单击submit时,他们的用户数据会自动记录在数据库的bookings表中。此时,表中记录的唯一数据是日期字段、学生和长度。我需要知道哪个用户正在发布此数据


有人能帮忙吗?

先看看模型。您定义
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
,则无需重新定义字段

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

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

你的形式和模型毫无意义。你不能只做
usname=User.username
;你需要一个实际的字段-一个外键-指向用户模型。这成功了!我在很多方面都是Django的不速之客,所以这将有助于我们向前迈进。非常感谢你的回答!!