Виджет GenericForeignKey администратора Django

Я создаю приложение Django, в котором все модели могут быть связаны друг с другом в порядке, установленном пользователем. Я все это настраиваю с помощью GenericForeignKeys. Кикер в том, что мне нужно иметь возможность поддерживать несколько коллекций этих типов отношений / администратора. Итак, у одного объекта может быть более одной коллекции связанных объектов.

Кто-нибудь знает хороший виджет 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)

I ' Я искал и искал, и нашел виджеты, которые делают это для отношений ManyToMany, но ничего для моей ситуации.

Спасибо, что нашли время, чтобы посмотреть на это.

5
задан kayluhb 20 July 2011 в 03:39
поделиться