Django Admin - 使用中间形式添加

时间:2013-03-07 00:27:22

标签: django-forms django-admin django-views url-routing

我发布了a question而没有任何结果。我担心这可能是我提出的方式......

在管理员中,我希望“添加”按钮将用户定向到与普通表单不同的视图(仅包含搜索字段和按钮)。在验证“搜索”表单之后,它会将用户发送到带有一些实例数据的标准添加/更改表单。实现这一目标的最佳方法是什么?

1 个答案:

答案 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)

进行指导