1

結果なしで質問を投稿しました。私はそれが私がそれを提起した方法かもしれないのではないかと心配しています...

管理画面では、[追加] ボタンを使用して、通常のフォーム (単純に検索フィールドとボタンで構成される) とは異なるビューにユーザーを誘導したいと考えています。「検索」フォームが検証されると、インスタンス データを含む標準の追加/変更フォームにユーザーが送信されます。これを達成するための最良の方法は何ですか?

4

1 に答える 1

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)

于 2013-03-12T08:26:29.850 に答える