问题描述
我正在尝试为用户创建一个非常简单的表单以从图书馆借书,并且我有一个借书按钮可以将用户重定向到另一个页面。
重定向用户后,我只允许单击“提交”或“取消”特定图书。
我的模型:
class Borrowed(models.Model):
person = models.ForeignKey(Person,null=True,on_delete=models.SET_NULL)
book = models.ForeignKey(Book,on_delete=models.SET_NULL)
taken_date= models.DateField(auto_now_add=True)
return_date= models.DateField(default=datetime.today()+timedelta(days=90))
def __str__(self):
return f"{self.person} borrowed {self.book}"
views.py:
def borrow(request,pk):
book = Book.objects.get(id=pk)
if request.method == 'POST':
# form = BorrowForm(instance=request.user.person)
form = BorrowForm(request.POST,initial={Book: book.title})
if form.is_valid():
form = form.save(commit=False)
form.person = request.user.person
form.book = book.title
form.save()
return redirect('all_books')
else:
form = BorrowForm(initial=book.title)
context = {'form': form,'book': book}
return render(request,'rental/borrow.html',context)
forms.py
class BorrowForm(forms.ModelForm):
class Meta:
model = Borrowed
fields= ['book']
由于我是Django的新手,所以我不知道该怎么做以及在哪里做。帮助将不胜感激。谢谢
解决方法
您在传递初始数据时使用了类似的东西传递数据时出错了
您必须像这样放置字段名称及其值
您仅需将其放入else语句中,因为如果将其放入request.post方法中,则如果用户删除该初始数据并将其保留为空白并保存,但是由于初始数据将被存储。
>form = ContactForm(initial={'subject': 'Hi there!'})
,
我找到了一个解决方案,问题是我将book.title作为初始名称。我应该使用:
form = BorrowForm(request.POST,initial={'book':book.id})