gpt4 book ai didi

Django 管理员 GenericForeignKey 小部件

转载 作者:行者123 更新时间:2023-12-04 18:14:18 39 4
gpt4 key购买 nike

我正在创建一个 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)

我搜索和搜索,并找到了为多对多关系执行此操作的小部件,但对于我的情况没有任何帮助。

感谢您花时间看这个。

最佳答案

看看 Grappelli 的通用外键小部件,它运行良好:
django-grappelli/generic_2_2

关于Django 管理员 GenericForeignKey 小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6756747/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com