2011-07-20 8 views
4

すべてのモデルをユーザーが設定した順序で相互に関連付けることができる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関係でこれを行うウィジェットを検索して検索しましたが、私の状況では何も見つかりませんでした。

ありがとうございました。

答えて

6

はうまく機能グラッペリのジェネリック外部キーウィジェット、見ている:良い見 django-grappelli/generic_2_2

+0

を、私はジャンゴ-CMSを使用していますので、私は(私が言及するのを忘れて、実際にそれを使用することができませんでしたそれ)、私は私のために働いているように見える何かのカスタムを作りました。応答していただきありがとうございます。 – kayluhb