我正在创建一个表单,供用户在我的网络应用上预订时间。目前我有以下文件。
请参阅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})
我想要实现的是,当用户点击表单上的提交时,他们的用户数据会自动记录在数据库的预订表中。在那一刻,记录在表中的唯一数据是日期字段,学生和长度。我需要知道哪个用户发布了这些数据。
有人可以帮忙吗?
答案 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')