1

以下に示すように、Django 1.5 に自己参照モデルがあります。

RELATIONSHIP_PARENT = 1
RELATIONSHIP_BLOCKED = 2
RELATIONSHIP_STATUSES = (
    (RELATIONSHIP_PARENT, 'Parent'),
    (RELATIONSHIP_BLOCKED, 'Blocked'),
) 

class Message(models.Model):
    content = models.CharField("Content", max_length=160, db_index=True)
    relationships = models.ManyToManyField('self',
        through='Relationship',
        symmetrical=False,
        related_name='related_to')

class Relationship(models.Model):
    parent_message = models.ForeignKey(Message, related_name='parent_messages')
    child_message = models.ForeignKey(Message, related_name='child_messages')
    status = models.IntegerField(choices=RELATIONSHIP_STATUSES)

そして、以下のようRelationshipsに個々のパネルを表示するときにインラインとして表示されるように Django 管理者を構成しました。Message

from django.contrib import admin
from demo.models import Message, Relationship

class RelationshipInline(admin.TabularInline):
    model = Relationship
    extra = 0
    fk_name = 'parent_message'

class MessageAdmin(admin.ModelAdmin):
    inlines = (RelationshipInline,)

admin.site.register(Message, MessageAdmin)
admin.site.register(Relationship)

私はテーブルに多くのメッセージ (それらの間に多くの親子関係がある) を格納するつもりです。管理パネルから個別のメッセージを表示すると、次のようなメッセージが表示されます。

ここに画像の説明を入力

赤い円で示されているように、Django 管理者はデータベース内のすべてのメッセージを収集し、メニューのドロップダウン リストとして表示します。私はそれを防ぐためにいくつかの方法を読みましたが、私が見つけた最も近いものは、管理パネルで ManyToMany 関係を表すraw_id_fields = ('parent_message', )ことですが、クラスの下に置いてみるとRelationshipInline、何もしないようです。

誰かが私にリンクやリソースを勧めたり、Django がドロップダウン リストにすべてのエントリ/メッセージを表示しないようにする方法を教えてくれたりしたら、助けていただければ幸いです。ありがとうございました。

4

2 に答える 2

2

これはうまくいくはずです。

class RelationshipFormSet(BaseInlineFormSet):
    def get_queryset(self):
        if not hasattr(self, '_queryset'):
            criteria = {} #Your criteria here
            qs = super(RelationshipFormSet, self).get_queryset().filter(**criteria)
            self._queryset = qs
        return self._queryset

class RelationshipInline(admin.TabularInline):
    model = Relationship
    extra = 0
    fk_name = 'parent_message'
    formset =  RelationshipFormSet
于 2013-06-21T18:54:42.817 に答える
2

これraw_id_fieldsは管理クラスに入れる必要があります。

admin.py

class MessageAdmin(admin.ModelAdmin):
    inlines = (RelationshipInline,)
    raw_id_fields = ('parent_message', )
于 2019-09-19T10:15:45.380 に答える