如何在Django中使用表单发布登录用户的数据?
我正在创建一个表单,供用户在我的web应用程序上预订时间。目前我有以下文件 请参阅forms.py:如何在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
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的不速之客,所以这将有助于我们向前迈进。非常感谢你的回答!!