1
我得到了下面的回溯,當我嘗試保存在線表單集在Django:類型錯誤在/添加/ unhashable類型: '名單'
Django Version: 1.10
Python Version: 3.5.1
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'books',
'bootstrapform']
回溯:
File "D:\virtualEnv\lib\site-packages\django\core\handlers\exception.py" in inner
39. response = get_response(request)
File "D:\virtualEnv\lib\site-packages\django\core\handlers\base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)
File "D:\virtualEnv\lib\site-packages\django\core\handlers\base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "D:\virtualEnv\lib\site-packages\django\views\generic\base.py" in view
68. return self.dispatch(request, *args, **kwargs)
File "D:\virtualEnv\lib\site-packages\django\views\generic\base.py" in dispatch
88. return handler(request, *args, **kwargs)
File "D:\virtualEnv\inlineformset\books\views.py" in post
27. return self.form_valid(form, formset)
File "D:\virtualEnv\inlineformset\books\views.py" in form_valid
52. return redirect(self.object.get_absolute_url())
File "D:\virtualEnv\lib\site-packages\django\shortcuts.py" in redirect
56. return redirect_class(resolve_url(to, *args, **kwargs))
File "D:\virtualEnv\lib\site-packages\django\shortcuts.py" in resolve_url
147. return reverse(to, args=args, kwargs=kwargs)
File "D:\virtualEnv\lib\site-packages\django\urls\base.py" in reverse
91. return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)))
File "D:\virtualEnv\lib\site-packages\django\urls\resolvers.py" in _reverse_with_prefix
343. possibilities = self.reverse_dict.getlist(lookup_view)
File "D:\virtualEnv\lib\site-packages\django\utils\datastructures.py" in getlist
140. return super(MultiValueDict, self).__getitem__(key)
我的觀點:
class FormsetMixin(object):
object = None
def get(self, request, *args, **kwargs):
if getattr(self, 'is_update_view', False):
self.object = self.get_object()
form_class = self.get_form_class()
form = self.get_form(form_class)
formset_class = self.get_formset_class()
formset = self.get_formset(formset_class)
return self.render_to_response(self.get_context_data(form=form, formset=formset))
def post(self, request, *args, **kwargs):
if getattr(self, 'is_update_view', False):
self.object = self.get_object()
form_class = self.get_form_class()
form = self.get_form(form_class)
formset_class = self.get_formset_class()
formset = self.get_formset(formset_class)
if form.is_valid() and formset.is_valid():
return self.form_valid(form, formset)
else:
return self.form_invalid(form, formset)
def get_formset_class(self):
return self.formset_class
def get_formset(self, formset_class):
return formset_class(**self.get_formset_kwargs())
def get_formset_kwargs(self):
kwargs = {
'instance': self.object
}
if self.request.method in ('POST', 'PUT'):
kwargs.update({
'data': self.request.POST,
'files': self.request.FILES,
})
return kwargs
def form_valid(self, form, formset):
self.object = form.save()
formset.instance = self.object
formset.save()
return redirect(self.object.get_absolute_url())
def form_invalid(self, form, formset):
return self.render_to_response(self.get_context_data(form=form, formset=formset))
class AuthorCreateView(FormsetMixin, CreateView):
template_name = 'books/author_and_books_form.html'
model = Author
form_class = AuthorForm
formset_class = BookFormSet
class AuthorUpdateView(FormsetMixin, UpdateView):
template_name = 'books/author_and_books_form.html'
is_update_view = True
model = Author
form_class = AuthorForm
formset_class = BookFormSet
class BookList(ListView):
model = Book
class BookDetail(DetailView):
model = Book
class AuthorList(ListView):
model = Author
class AuthorDetail(DetailView):
model = Author
任何人都可以建議我解決這個錯誤的方法嗎?
請顯示您的'Author.get_absolute_url'方法。 – Alasdair
某處你可能必須在傳遞參數之前打開列表。像函數(* list)而不是函數(list)。從堆棧跟蹤它不清楚。嘗試發佈完整的回溯 – sprksh
def get_absolute_url(self): return reverse('books:detail',kwargs = {'pk':self.pk}) 這種擦除不可重複的類型:'list'錯誤,但在Reverse找不到參數'()'和關鍵字參數'{}'的'book_list'。 0模式(S)嘗試:[] –