admin-inline字段的变量小部件

时间:2011-08-08 09:39:47

标签: django model widget inline admin

让我们考虑以下模型:

class Item(models.Model):
   pass

class TagType(models.Model):
   tag_name = models.CharField()
   tag_value_type = models.CharField() #or any other serializable field

#and a class, which is ManyToMany for Item x TagType
class Tag(models.Model):
   item = models.ForeignKey(Item)
   tag_type = models.ForeignKey(TagType)
   value = models.CharField()

在django admin中,我想对项目管理员内的标签进行内联编辑。然而, 我想对Tag类的值字段进行变量控制。例如,让我们 考虑到我有两种标签类型:COLOR,它有一个select / option小部件, 和一个SIZE标签,它有一个DecimalField小部件。

如何在更改tag_type字段值时更改值字段的窗口小部件?这是 甚至可能?这难以实现吗?这意味着,在一个Item实例中,Tag instancef的值字段可能有不同的小部件。

1 个答案:

答案 0 :(得分:0)

您可以覆盖内联模型使用的表单类的窗口小部件,您可以在其中检查tag_type,然后告诉值字段您要使用哪个窗口小部件作为值。

但是,这对于创建新的标记记录会有问题......

当您编辑现有记录时,您将拥有tag_type的值来确定要使用的窗口小部件,但新记录还没有值 - 您将显示哪个窗口小部件?

我认为你最好的办法是分两个步骤。一个创建TagType,一个创建/编辑标签。