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

2024-10-02 08:22:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有三种型号:

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实例都是另一个类实例的引用,每个Foo实例必须引用系统中所有其他类的引用。在

如果我有另一个类的实例列表

^{pr2}$

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

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

date = (datePicker)

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

在哪里另一个ClassX.name不可编辑,仅显示其他类实例的名称。在

有什么简单的方法吗?在


Tags: 实例namedefaultdatemodelfoomodelsbar
1条回答
网友
1楼 · 发布于 2024-10-02 08:22:17

您可以使用django.contrib.admin. 下面是一个例子。我创造了管理员py在同一个Django应用程序(“test_app”)中模型.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实例时添加或修改多个条关系的功能。注意,另一个类选项是下拉菜单,但是其他类名称字段不可编辑。在

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

相关问题 更多 >

    热门问题