2011-11-09 18 views
4
なし

標準例:ジャンゴ - 管理者:編集子モデルinlineForm

class Author(models.Model): 
    name = models.CharField(max_length=100) 

class Book(models.Model): 
    title = models.CharField(max_length=100) 
    author = models.ForeignKey(Author) 
    #... Many other fields ... 

私はAuthor変更ページからBook Sを編集したいと思います。
InlineModelAdminで試しましたが、Bookには多くのフィールドがありますので、編集が容易ではありません。
私は子供の子供向けのリンクを著者/変更テンプレートに入れようとしたのです。

<ul> 
    <li><a href="{% url admin:content_scribpart_add %}">Add a Book</a></li> 
{% for book in original.book_set.all %} 
    <li><a href="{% url admin:myapp_book_change book.id %}">Edit {{ book }}</a></li> 
{% endfor %} 
</ul> 

しかし、いくつかの質問があります

  • 私は保存ボタンが関連Author
  • に戻ることができますどのよう Bookフォーム
  • に関連Author IDを事前に移入することができますどのように
  • 正しい軌道にいるのですか?

答えて

4

はい、確かです。

<ul> 
    <li><a href="{% url admin:content_scribpart_add %}?author={{ object_id }}">Add a Book</a></li> 
{% for book in original.book_set.all %} 
    <li><a href="{% url admin:myapp_book_change book.id %}?author={{ object_id }}">Edit {{ book }}</a></li> 
{% endfor %} 
</ul> 
  • response_add() and response_change()をオーバーライドし、ブックに対応するModealAdminを変更します。あなたのURLにGETパラメータとして

    1. アペンドauthor主キー。

      from django.http import HttpResponseRedirect 
      from django.core.urlresolvers import reverse 
      
      class BookAdmin(admin.ModelAdmin): 
      
          def formfield_for_foreignkey(self, db_field, request, **kwargs): 
           if db_field.name == "author":      
            try: 
             author_pk = int(request.GET.get('author', ''),) 
            except ValueError:   
             pass 
            else: 
             kwargs["initial"] = Author.objects.get(pk=author_pk) 
      
           return super(BookAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs) 
      
          def response_add(self, request, obj, post_url_continue=None): 
           return HttpResponseRedirect(reverse('admin:myapp_author_change', args=(obj.author.pk,)) 
           ) 
      
          def response_change(self, request, obj, post_url_continue=None): 
           return HttpResponseRedirect(reverse('admin:myapp_author_change', args=(obj.author.pk,)) 
           ) 
      
  • +0

    'Author.objects.filter(PK = author_pk)'選択ボックスをフィルタが、事前 –

    +0

    最後に私はを移入しません:我々はまた、override formfield_for_forein_keyために事前移入authorフィールドをすることに注意してくださいkwargs ["queryset"] = Author.objects.filter(pk = author_pk) ' –

    +0

    の代わりに' 'kwargs [" initial "] = Author.objects.get(pk = author_pk)'を使うつもりです 'admin:myapp_author_change '' admin_myapp_author_change'の代わりに –

    関連する問題