如何在Django表单中为ForeignKey字段设置初始值?

2024-05-19 21:13:52 发布

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

我在设置ForeignKey字段的初始值时遇到问题。我有一个CreateView表单,我正在从bookdail视图访问它,该视图有url:path('book/<int:pk>', views.BookDetailView.as_view(), name='book-detail'),我想在我的表单中输入/book/4的初始值

在视图.py在

class BookInstanceCreate(PermissionRequiredMixin, CreateView):
    model = BookInstance
    fields = '__all__'
    permission_required = 'catalog.can_mark_returned'
    initial = {'book': BookInstance.book.id}
    def get_success_url(self):
        return reverse('book-detail', kwargs={'pk': self.object.book.pk})

我试图用:initial = {'book': BookInstance.book.id}访问一本书,但遇到错误:initial={'book':图书实例.book.id} AttributeError:“ForwardManyToOneDescriptor”对象没有属性“id”

这是我的模型.py公司名称:

^{pr2}$

Tags: pathpyself视图idurl表单initial
2条回答

让我们仔细看看BookInstance.book.id。在

BookInstance->;一个模型类

book->;该模型中的未填充字段(ForwardManyToOneDescriptor,重点是Descriptor

id->;当我们使用Book.objects.first().id时,django从数据库内部填充的字段

因此,您试图从模型class而不是模型instance获取book外键。在

您可能希望在这里使用类似于set initial value in CreateView from ForeignKey (non-self.request.user)的内容。您可以从get_initial方法中访问request对象。在

下面是它的样子:

class BookInstanceCreate(PermissionRequiredMixin, CreateView):
    model = BookInstance
    fields = '__all__'
    permission_required = 'catalog.can_mark_returned'

    def get_initial(self):
        # You could even get the Book model using Book.objects.get here!
        return {
            'book': self.kwargs["pk"]
        }

    def get_success_url(self):
        return reverse('book-detail', kwargs={'pk': self.object.book.pk})
class BookInstanceCreate(PermissionRequiredMixin, CreateView):
     model = BookInstance
     fields = '__all__'
     ermission_required = 'catalog.can_mark_returned'
     def get_success_url(self):
        return reverse('book-detail', kwargs={'pk': self.object.book.pk})

无法从类名访问值

^{pr2}$

它应该是那个类的对象。在

相关问题 更多 >