以下に示すように、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 がドロップダウン リストにすべてのエントリ/メッセージを表示しないようにする方法を教えてくれたりしたら、助けていただければ幸いです。ありがとうございました。