2017-03-23 22 views
0

これは投稿モデルです。投稿を追加するにはdjango管理者で開いたときにフィールドコンテンツタイプが表示されますが、コンテンツタイプを選択するドロップダウンはありません。私はここで何か間違っていますか?コンテンツタイプのドロップダウンが表示されないdjango管理フォーム

class Post(models.Model): 

    FEATURE_LIMITS = models.Q(app_label=u'forums', model=u'forum') 

    content_type = models.ForeignKey(ContentType, limit_choices_to=FEATURE_LIMITS, on_delete=models.CASCADE) 
    object_id = models.PositiveIntegerField() 
    content_object = GenericForeignKey('content_type', 'object_id') 

admin.pyためのポスト

# imports 

admin.site.register(posts_models.Post) 

ポストとの一般的な関係を持っているモデルのフォーラムは、あります。

class Forum(models.Model): 
    # other fields 
    posts = GenericRelation(Post) 

ポストフィールドはdjango adminでは表示されません(他のフィールドは表示されます)。

admin.pyためのフォーラム

# imports 

admin.site.register(forums_models.Forum) 

私はadmin.pyに変更を加える場合:http://localhost:8000/admin/forums/forum/add/を打つに続いて

class PostInline(GenericTabularInline): 
    model = Post 

class ForumAdmin(admin.ModelAdmin): 
    inlines = [ 
     PostInline, 
    ] 

admin.site.register(forums_models.Forum, ForumAdmin) 

を、ページが永遠にロードし続けます。

+0

しかし、なぜあなたは唯一のモデルのための一般的な関係を作成する必要がありますか?一般的な関係はそのようなもののために効率的ではありません。 –

+0

私は今後さらに多くのモデルを追加する予定です。 – rohanagarwal

答えて

1

あなたのアプリケーションを間違って設定したようです。

マイプロジェクト構造

app 
|-settings/ 
|-forums/ 
|--models.py 
|--admin.py 
|-posts/ 
|--models.py 
|--admin.py 

のでポスト/ models.py

class Post(models.Model): 
    FEATURE_LIMITS = models.Q(app_label='forums', model='forum') 

    name = models.CharField(max_length=100) 

    content_type = models.ForeignKey(ContentType, limit_choices_to=FEATURE_LIMITS, on_delete=models.CASCADE) 
    object_id = models.PositiveIntegerField() 
    content_object = GenericForeignKey('content_type', 'object_id') 

ポスト/ admin.py

from .models import Post 

class PostInline(GenericTabularInline): 
    model = Post 

フォーラム/ models.py

class Forum(models.Model): 
    # other fields 
    name = models.CharField(max_length=100) 
    posts = GenericRelation('posts.Post') 

フォーラム/ admin.py

from .models import Forum 
from posts.admin import PostInline 

@admin.register(Forum) 
class ForumAdmin(admin.ModelAdmin): 
    inlines = [ 
     PostInline, 
    ] 

、すべてが魔法のように動作します。

私は正常に表示するために、外部キーフィールドを防止間違ったアプリでモデルを登録しようとしました。(アプリpostsでモデルForum

+0

私はそれに取り組んでいます、これはコピー貼りですので、間違いがあるかもしれません、ディレクトリ構造について心配しないでください、それは完璧です。私はdjango管理者をオーバーライドしており、それが原因です。 – rohanagarwal

+0

@rohanagarwal私は自分でその解決策を試してみましたが、これは機能しています(これは試していないコードではないことを知っておいてください) –

+0

あなたは正しいです。あなたがdjango.contrib.adminを使っているので、あなたが書いたコードが分かります。私はこの管理者をオーバーライドしているので、問題があります。新しいプロジェクトで質問にコードを書くと、それは機能します。なぜなら、管理者は新しいプロジェクトで上書きされないからです。 **これはコピー貼りですので、間違いがある可能性があります**私は元のコードを投稿できないので、私が投稿したコードです – rohanagarwal

0

私はadmin.widgets.ForeignKeyRawIdWidgetwidgetを使用していたので、あなたが無限ループを持って推測しています。

content_type = models.ForeignKey(ContentType, limit_choices_to=FEATURE_LIMITS, on_delete=models.CASCADE) 

content_typeは外部キーフィールドです。ドロップダウンはありませんでした。 はadmin.pyで次の変更を行い、これを防ぐには:

class PostAdmin(admin.ModelAdmin): 
    raw_id_field_excludes = 'content_type' 

admin.site.register(Post, PostAdmin) 
関連する問題