gpt4 book ai didi

python - Django Admin - 表格内联外键字段列表的动态值

转载 作者:行者123 更新时间:2023-11-28 19:25:59 25 4
gpt4 key购买 nike

我有三个模型:

class Foo (models.Model):
date = models.DateField(default = date.today)

class Bar (models.Model):
foo = models.ForeignKey(Foo)
another = models.ForeignKey(AnotherClass) #this class is important
amount = models.IntegerField(default=0)

class AnotherClass (models.Model):
name = models.CharField()

现在我想以表格内联方式添加/更改 Foo+Bar 的实例。关键是每个Bar实例都是对一定数量的AnotherClass实例的引用,而每个Foo实例都必须引用系统中所有的AnotherClass。

所以如果我有一个 AnotherClass 的实例列表

AnotherClass1
AnotherClass2
AnotherClass3
AnotherClass4

Foo 添加/更改管理页面应该是这样的

Add Foo!
--------------------------------------------

date = (datePicker)

Pretty Bar TabularInline
--------------------------------------------
AnotherClass1.name amount = intPicker
AnotherClass2.name amount = intPicker
AnotherClass3.name amount = intPicker
AnotherClass4.name amount = intPicker

其中 AnotherClassX.name 不可编辑,仅显示 AnotherClass 实例的名称。

有什么简单的方法可以做到这一点吗?

最佳答案

您可以使用 django.contrib.admin 中的 TabularInline 做类似的事情。下面是一个例子。我在与 models.py 相同的 Django 应用程序('test_app')中创建了 admin.py,只是为了将管理站点的内容与模型代码分开。

### models.py ###
from django.db import models
from datetime import date

class Foo (models.Model):
date = models.DateField(default = date.today)

class AnotherClass (models.Model):
name = models.CharField(max_length=128)

def __unicode__(self):
return u'%s' % (self.name)

class Bar (models.Model):
foo = models.ForeignKey(Foo)
another = models.ForeignKey(AnotherClass) #this class is important
amount = models.IntegerField(default=0)

class Meta:
unique_together = (('foo', 'another'),)

### admin.py ###
from test_app.models import Foo, Bar, AnotherClass
from django.contrib import admin

class BarsInline(admin.TabularInline):
model = Bar

class FooAdmin(admin.ModelAdmin):
inlines = (BarsInline,)

admin.site.register(Foo, FooAdmin)
admin.site.register(Bar)
admin.site.register(AnotherClass)

这将添加在创建或编辑 Foo 实例时添加或修改多个 Bar 关系的功能。请注意,AnotherClass 选项是下拉菜单,但 AnotherClass.name 字段不可编辑。

需要注意的一个问题是您描述的模型架构允许同一个 AnotherClass 实例多次与 Foo(通过 Bar)相关联。这可能是也可能不是您想要的。为了防止 AnotherClass 实例和 Foo 实例之间存在多重关系,请在 Bar 模型中使用 Meta 选项“unique_together”,该选项在上面的示例代码中使用。如果您想允许此行为,只需删除此 Meta 类选项即可。

关于python - Django Admin - 表格内联外键字段列表的动态值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13126162/

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