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

2024-09-27 18:01:14 发布

您现在位置:Python中文网/ 问答频道 /正文

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

一旦用户被重定向,我只想让他点击提交或取消特定的书籍

我的模型是:

class Borrowed(models.Model):
    person = models.ForeignKey(Person, null=True, on_delete=models.SET_NULL)
    book = models.ForeignKey(Book, null=True, 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的新手。我们将不胜感激。多谢各位


Tags: 用户selfformtruereturntitlemodelsrequest
2条回答

您在传递初始数据时犯了错误。请使用类似的方式传递数据

您必须像这样输入字段名及其值

您必须仅将其放入else语句中,因为如果您将其放入request.post方法中,那么如果用户删除初始数据并将其设置为空并保存,但由于初始数据,它将被存储

form = ContactForm(initial={'subject': 'Hi there!'})

我找到了一个解决办法,问题是我把book.title作为首字母传递。我应该使用:

form = BorrowForm(request.POST, initial={'book':book.id})

相关问题 更多 >

    热门问题