Django管理GenericForeignKey小部件 [英] Django admin GenericForeignKey widget

查看:92
本文介绍了Django管理GenericForeignKey小部件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在创建一个Django应用程序,其中所有模型可以按照用户设置的顺序相互关联。我正在使用GenericForeignKeys设置所有这一切。踢球者是我需要能够支持这些类型的关系/管理员的多个集合。所以一个对象可以有一个以上的相关对象的集合。



有没有人知道一个好的GenericForeignKey小部件的这种情况?最好是自动完成搜索,填充管理表单,因为我可以得到大量的对象。



这是我的应用程序获取代码更好地了解我的意思。

  from django.contrib import admin 
from django.contrib.contenttypes import generic $来自django.contrib.contenttypes.models的b $ b导入ContentType
从django.db导入模型
从django导入表单


#模型
类Base(models.Model):
title = models.CharField(max_length = 255)

class Meta:
abstract = True

def __unicode __自我)
return self.title

class相关(Base):
关联资源的通用关系模型

order = models.IntegerField(blank = True,null = True)
limit = models.Q(model ='Apple')| models.Q(model ='Orange')| model.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 =模型.PositiveIntegerField(db_index = True)
related_object = generic.GenericForeignKey('related_content_type','related_object_id')

class Meta:
orders =('order',)
abstract = True

def __unicode __(self):
return self.object.title

class FreshFruit(Related):
pass

class OldFruit(相关):
pass

class Apple(Base):
pass

class Orange(Base)
pass

class Pear(Base):
pass

#管理员类
class FreshFru itInline(generic.GenericStackedInline):
model = FreshFruit
extra = 1
#管理类

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关系执行此操作的小部件,但对我的情况没有任何影响。



<感谢您抽出时间来看看这个。

解决方案

看看Grappelli的通用外键部件,它工作正常l:
django-grappelli / generic_2_2


I'm creating a Django app where all the models can be related to each other in an order set by the user. I'm setting all this up using GenericForeignKeys. The kicker is that I need to be able to support multiple collections of these types of relationship/admin. So one object can have a more than one collection of related objects.

Does anyone know of a good GenericForeignKey widget for this situation? Preferably, it would be an autocomplete search that populates the admin form since I can end up having a large number of objects.

Here is the code for my app to get a better idea of what I mean.

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've searched and searched, and found widgets that do this for a ManyToMany relationship, but nothing for my situation.

Thanks for taking the time to look at this.

解决方案

Have a look at Grappelli's generic foreign key widget, which works well: django-grappelli/generic_2_2

这篇关于Django管理GenericForeignKey小部件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆