How to post data of logged in user with a form in Django?
我正在创建一个表单,供用户在我的Web应用程序上预订时间。目前我有以下文件。
见Forms.py:
1 2 3 4 5 6 7 8 9 | 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:
1 2 3 4 5 | 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:
1 2 3 4 5 6 7 8 9 10 11 | @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 2 3 4 5 | 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) |
然后将表单更改为:
1 2 3 4 | class BookingForm(forms.ModelForm): class Meta: model = Booking exclude = ['user', ] |
号
如果使用
运行
1 2 3 4 5 | if form.is_valid(): form = form.save(commit=False) form.user = request.user form.save() return redirect('index') |