如何根据第一个字段中的选择动态更改管理界面中显示的字段列表?

How can I dynamically change list of fields displayed in admin interface depending on the choice in the first field?

我希望管理界面仅在我选择 'B' 作为 category 时显示 disctrict 字段。如果我选择 'W',我希望显示 Offer 模型的所有字段。是否可以根据同一模型中其他字段的选择在管理页面中显示选定(过滤)的字段?预先感谢您的帮助。

我的模特:

class Category(models.Model):

NAME_CHOICES = (
    ('B', 'BLACK'),
    ('W', 'WHITE'),
)

name = models.CharField(max_length=200, choices=NAME_CHOICES)

class Meta:
    verbose_name_plural = 'Categories'

def __unicode__(self):
    return self.get_name_display()



class Offer(models.Model):

category = models.ForeignKey(Category, verbose_name='Kategoria')
city = models.CharField(max_length=128, verbose_name='Miasto')
province = models.CharField(max_length=3)
district = models.CharField(max_length=128, verbose_name='Dzielnica')

def __unicode__(self):
    return "Offer number %s" % (self.id)

首先我必须告诉大家,django 只能以同步方式工作。所以如果你想选择使用哪个输入,你必须发送请求并等待反馈。在我看来,没有直接的方法可以正确地完成这项任务。

我看到了一些解决方案:

1) 您可以使用 jQuery。但主要问题是 django 有一个带有内置小部件的自己的管理系统。您可以尝试通过两种方式自定义它:

  • 采用具有此选项的应用程序(例如,django-admin-tools)并在您的表单上创建自定义行为;
  • manage.py collectstatic 然后转到管理文件夹并创建自定义 jQuery 脚本。

2) 使用 ModelChoiceField 为您的模型构建自定义管理表单。我不确定这个字段行为是否真的对你有帮助,但你可以调查一下。

如果我需要执行此任务,我会选择第一种方式,使用静态管理和自定义 jQuery。