2

私はdjango-floppyformsを使用しています。HTML テンプレートに値を渡すにはどうすればよいですか? (フィールドの初期化と単純な印刷の両方)。以下のコードは、設定を説明しています。

models.py:

class ContactMessage(models.Model):    
    msg_sender = models.ForeignKey(User, related_name="sent_messages")
    msg_receiver = models.ForeignKey(User, related_name="received_messages")
    listing = models.ForeignKey(Listing)
    msg_title = models.CharField(max_length=200)
    msg_body = models.TextField()

urls.py:

url(r'^listing/(?P<listing_id>\d+)/reply/$', views.ReplyListingView.as_view(), name='reply_listing'),

ビュー.py:

class ReplyListingView(CreateView):
    model = ContactMessage
    form_class = CreateContactMessageForm

フォーム.py:

class CreateContactMessageForm(forms.ModelForm):

    class Meta:
        model = ContactMessage

        exclude = ['msg_sender',
                   'msg_receiver',
                   'listing',
                  ]

        widgets = {
            'msg_title': forms.TextInput({"value": ????}),
            'msg_body': forms.Textarea,
        }   

contactmessage_form.html:

{% extends 'base.html' %}

{% block content %}
<div class="row">
  <div class="col-md-6">
      <p>USER: {{request.user}} 
         SENDER: {{ form.sender }} 
         RECEIVER: {{ form.receiver }}
         LISTING: {{ form.listing }}
      </p>
      <form method="post">
        {% csrf_token %}
        {{form}}
        <input class="btn btn-success" type="submit" value="Send" />
        <button type="button" class="btn btn-default" onClick="window.history.back();">
                Cancel
        </button>
      </form>
  </div>
</div>

{% endblock %}

そう:

特定のコンテキストで、リスト、送信者、および受信者を知っているとします (背景説明: URL には、listing_id が含まれているため、リストのタイトルと所有者がわかります。さらに、送信者は現在ログインしているユーザーである必要があります)。

ここで、ReplyListingView を表示し、これら 3 つの値をそれに渡し、CreateContactMessageForm を次のように表示します。

  1. msg_title ウィジェットには、指定されたリストの「タイトル」フィールドの値が事前に入力されています (つまり、上記のコードの「????」部分の代わりに)。

  2. <p>USER:...</p>html (パーツ)の送信者、受信者、およびリスト フィールドの値にアクセスできます。

どうやってやるの?

質問が十分に明確であることを願っています。

ありがとう :)

4

4 に答える 4

0
class ReplyListingView(CreateView):

    model = ContactMessage
    form_class = CreateContactMessageForm

    #add this line to the view
    initial={"field_name":"value"}
于 2014-02-10T18:08:49.840 に答える
0

初期ビュー変数があります。

このサイトには、すべてのビュー メソッドと変数が含まれています: http://ccbv.co.uk/projects/Django/1.5/django.views.generic.edit/CreateView/

フォームをインスタンス化して初期値を追加するメソッドをオーバーライドすることもできます

于 2014-02-10T17:08:35.743 に答える
0

タイトルに関しては、 を使用して初期データをフォームに渡す必要がありますget_initial

他のフォーム以外のものに関しては、ビューはそれを 経由でテンプレートに挿入する必要がありますget_context_data

class ReplyListingView(CreateView):
    model = ContactMessage
    form_class = CreateContactMessageForm

    def get_initial(self):
        d = super(ReplyListingView, self).get_initial()
        d['title'] = "blah"
        return d

    def get_context_data(self, **kwargs):
        d = super(ReplyListingView, self).get_context_data(**kwargs)
        d['foo'] = 'bar'
        return d
于 2014-02-13T11:45:59.600 に答える