すべてのモデルをユーザーが設定した順序で相互に関連付けることができるDjangoアプリケーションを作成しています。私はこれをGenericForeignKeysを使って設定しています。キッカーは、私はこれらのタイプの関係/管理の複数のコレクションをサポートできる必要があるということです。そのため、1つのオブジェクトは複数の関連オブジェクトのコレクションを持つことができます。Django admin GenericForeignKeyウィジェット
この状況の良いGenericForeignKeyウィジェットを知っている人はいますか?できれば、私は多数のオブジェクトを持つことになるので、管理フォームに入力するオートコンプリート検索が望ましいでしょう。
私のアプリが私の意図をよりよく理解するためのコードです。
from django.contrib import admin
from django.contrib.contenttypes import generic
from django.contrib.contenttypes.models import ContentType
from django.db import models
from django import forms
# Models
class Base(models.Model):
title = models.CharField(max_length=255)
class Meta:
abstract = True
def __unicode__(self):
return self.title
class Related(Base):
""" A generic relationship model for relating resources.
"""
order = models.IntegerField(blank=True, null=True)
limit = models.Q(model = 'Apple') | models.Q(model = 'Orange') | models.Q(model = 'Pear')
content_type = models.ForeignKey(ContentType, related_name="related_%(class)s")
object_id = models.PositiveIntegerField(db_index=True)
object = generic.GenericForeignKey()
related_content_type = models.ForeignKey(ContentType, related_name="related_related_%(class)s", limit_choices_to = limit)
related_object_id = models.PositiveIntegerField(db_index=True)
related_object = generic.GenericForeignKey('related_content_type', 'related_object_id')
class Meta:
ordering = ('order',)
abstract = True
def __unicode__(self):
return self.object.title
class FreshFruit(Related):
pass
class OldFruit(Related):
pass
class Apple(Base):
pass
class Orange(Base):
pass
class Pear(Base):
pass
# Admin classes
class FreshFruitInline(generic.GenericStackedInline):
model = FreshFruit
extra = 1
# Admin classes
class OldFruitInline(generic.GenericStackedInline):
model = OldFruit
extra = 1
class AppleAdmin(admin.ModelAdmin):
inlines = [FreshFruitInline, OldFruitInline,]
admin.site.register(Apple, AppleAdmin)
class OrangeAdmin(admin.ModelAdmin):
inlines = [FreshFruitInline, OldFruitInline,]
admin.site.register(Orange, OrangeAdmin)
class PearAdmin(admin.ModelAdmin):
inlines = [FreshFruitInline, OldFruitInline,]
admin.site.register(Pear, PearAdmin)
私はManyToMany関係でこれを行うウィジェットを検索して検索しましたが、私の状況では何も見つかりませんでした。
ありがとうございました。
を、私はジャンゴ-CMSを使用していますので、私は(私が言及するのを忘れて、実際にそれを使用することができませんでしたそれ)、私は私のために働いているように見える何かのカスタムを作りました。応答していただきありがとうございます。 – kayluhb