【发布时间】:2022-11-06 04:02:30
【问题描述】:
我想要做的是有一个带有单个字段的表单,该字段获取主键并重定向到该主键的 DetailView。虽然我可以通过拥有一个 ListView 然后从 ListView 转到 DetailView 来实现这一点,但这是我不需要的额外步骤,因为我已经有一个主键。任何帮助,将不胜感激。
模型.py
class Book(models.model):
book_id = models.TextField(primary_key=True)
# some other fields
def get_absolute_url(self):
return reverse('book-detail', kwargs={'pk':self.pk})
表格.py
class BookSearchForm(forms.ModelForm):
class Meta:
model = Book
fields = ['book_id']
视图.py
class BookDetailView(DetailView):
model = Book
template_name = 'book-detail.html'
使用 ListView 我可以这样做:
class BookListView(ListView):
template_name = 'book-list.html'
form_class = BookSearchForm
def get_queryset(self, *args, **kwargs):
qs = super().get_queryset(*args, **kwargs)
book_id = self.request.Get.get('book_id', None)
if book_id:
qs=qs.filter(book_id=book_id).first()
if not book_id:
qs=qs.none()
return qs
没有 ListView 怎么办?
class BookSearchView(FormView):
template_name = 'book-search.html'
form_class = BookSearchForm
# what should I do here, form_valid, get?
网址.py
urlpatterns = [
path('book/search/',BookSearchView.as_view(),name='book-search'),
path('book/<str:pk>/',BookDetailView.as_view(),name='book-detail')
]
图书搜索.html
<form action="." method="GET">
{{form}}
</form>
【问题讨论】:
标签: django-forms django-class-based-views