【问题标题】:Django Admin - Add using intermediary formDjango Admin - 使用中间形式添加
【发布时间】:2013-03-07 00:27:21
【问题描述】:

我发布了a question 没有任何结果。我担心这可能是我摆姿势的方式......

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

【问题讨论】:

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


    【解决方案1】:

    所以,我得到了 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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-18
      • 2015-01-24
      • 1970-01-01
      • 2021-02-14
      相关资源
      最近更新 更多