如何在Django表单中自动填写字段?

问题描述

我正在尝试为用户创建一个非常简单的表单以从图书馆借书,并且我有一个借书按钮可以将用户重定向到另一个页面。

重定向用户后,我只允许单击“提交”或“取消”特定图书。

我的模型:

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})

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...