7

Django.db モデル クラスが与えられた場合:

class P(models.Model):
   type = models.ForeignKey(Type) # Type is another models.Model class
   name = models.CharField()

指定されたタイプで新しい P を作成したい場合、つまり、「タイプ」をデフォルトの非表示フィールド (ユーザーから) にするにはどうすればよいですか? タイプは次のように指定します:

http://x.y/P/new?type=3 

そのため、フォームには「タイプ」フィールドは表示されませんが、P が保存されると、そのタイプの ID は 3 になります (つまり、Type.objects.get(pk=3))。

第二に、一般的なDjangoビュー、つまりvizを使用するときに、urls.pyを介してURLに「デフォルト」タイプを指定する方法(および可能です)はありますか。

urlpatterns = ('django.generic.views.create_update',
  url(r'^/new$', 'create_object', { 'model': P }, name='new_P'),
)

問題の一部である可能性があることを説明するのは非常に難しいことがわかりました。:) 入力は大歓迎です!

4

3 に答える 3

8

ウィジェットdjango.forms.widgets.HiddenInputは、フィールドを非表示としてレンダリングします。

ほとんどの場合、非表示のフォーム値も url パラメータとして指定できることがわかると思います。言い換えると:

<form action="new/{{your_hidden_value}}" method="post">
....
</form>

そしてurls.pyで:

^/new/(?P<hidden_value>\w+)/

モデルインスタンスの主キーを追跡する必要がある場合にのみ、非表示のフォームフィールドが本当に必要であることに気付くため、私はこの手法を好みます。この場合、「編集/ pkey」URLは、編集の開始とフォームの戻りの両方の目的を果たします。 、保存時に POST を受け取ります。

于 2008-11-07T05:26:25.553 に答える
5

モデルにデフォルトの外部キーを設定するには:

mydefault = Type.objects.get(pk=3)

class P(models.Model):
   type = models.ForeignKey(Type, default=mydefault) # Type is another models.Model class
   name = models.CharField()

pk=x理想的には主キーが何に等しいかを気にする必要がないので、使用はかなり醜いことに注意してください。他の属性で目的のオブジェクトに到達してみてください。

URLにデフォルトを設定する方法は次のとおりです

# URLconf
urlpatterns = patterns('',
    (r'^blog/$', 'blog.views.page'),
    (r'^blog/page(?P<num>\d+)/$', 'blog.views.page'),
)

# View (in blog/views.py)
def page(request, num="1"):
    # Output the appropriate page of blog entries, according to num.

上記の例では、両方のURLパターンが同じビュー(blog.views.page)を指していますが、最初のパターンはURLから何もキャプチャしません。最初のパターンが一致する場合、page()関数はnumのデフォルト引数「1」を使用します。2番目のパターンが一致する場合、page()は正規表現によってキャプチャされたnum値を使用します。

于 2008-11-07T04:32:23.043 に答える
2

隠し値をURLに含めるというアンドリューのアプローチを採用し、それでもDjangoの組み込みフォームテンプレートの1つを使用したい場合は、隠しフィールドを除外する方法があります。

http://docs.djangoproject.com/en/1.1/topics/forms/modelforms/#using-a-subset-of-fields-on-the-form

于 2009-12-20T23:16:18.937 に答える