我发布了a question而没有任何结果。我担心这可能是我提出的方式......
在管理员中,我希望“添加”按钮将用户定向到与普通表单不同的视图(仅包含搜索字段和按钮)。在验证“搜索”表单之后,它会将用户发送到带有一些实例数据的标准添加/更改表单。实现这一目标的最佳方法是什么?
答案 0 :(得分:0)
所以,由于缺乏对这个问题的回答,我得到了Tumbleweeds青铜星。我最终部分解决了以下问题......
在我的模特的管理员
中添加了一个get_urls方法def get_urls(self):
urls = super(MyModelAdmin, self).get_urls()
addl = patterns(',
(r'^add/$', 'MyApp.views.my_add_view)
)
return addl + urls
为“添加”视图
创建了一个表单from django import forms
from MyApp.models import MyModel
class LookupForm(forms.Form):
pk = ''
url = forms.URLField(max_length=_URLMAXLEN, label='Video URL',
widget=forms.TextInput(attrs={'size':'60', 'autofocus':'autofocus'}))
def clean_url(self):
value = self.cleaned_data['url']
# some validation of 'value' here
# ...
self.pk = somefoo(value)
return value
在视图中,我在验证并保存模型实例后重定向到更改表单
from django.shortcuts import render
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
from MyApp.forms import LookupForm
def my_add_view(request):
confirm = ''
if request.method == 'POST':
form = LookupForm(request.POST)
if form.is_valid():
if 'confirm_button' in request.POST:
foo_save() # save model instance
# LookupForm's 'pk' property set during some clean_ method
href = reverse('admin:MyApp_MyModel_change', args=(form.pk,))
return HttpResponseRedirect(href)
elif 'search_button' in request.POST:
confirm = foo_context() # some context from the search results
else:
form = LookupForm()
return render(request, 'my_template.html', {'form': form, 'confirm': confirm})
不幸的是,我无法实现使用实例数据显示更改表单的目标。我不希望保存并重定向到change_form,而是希望能够使用MyModelForm(instance=some_instance)