LoginSignup
3
2

More than 5 years have passed since last update.

Django:Admin: 追加フォームに初期値を設定する

Posted at

Ticket-Orderのモデル

admin.py: OrderAdminForm

  • 通常のモデルフォーム
class OrderAdminForm(forms.ModelForm):
    class Meta:
        model = Order
        exclude = []

admin.py: OrderAdmin

  • OrderAdminFormを使うようにする
  • get_form()
  • URIのクエリにいれた ticket_id からTicketオブジェクトを取得
  • base_fields['ticket'].initialにセットする
class OrderAdmin(admin.ModelAdmin):

    form = OrderAdminForm

    def get_form(self, request, obj=None, **kwargs):
        form_class = super(OrderAdmin, self).get_form(request, obj, **kwargs)
        ticket_id = request.REQUEST.get('ticket_id', None)
        form_class.base_fields['ticket'].initial = ticket_id and Ticket.objects.get(id=ticket_id)
        return form_class 

templates/admin/tickets/ticket/change_form.html

  • Django の標準テンプレートをコピる
  • Ticketの編集画面で、Orderの追加画面へのアンカーを追加する
  • <a href="history/">{% trans "History" %}</a> の隣とか
<a href="{% url 'admin:tickets_order_add' %}?ticket_id={{ object_id }}">注文 </a><
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2