Django Admin:如何根据另一个ForeignKey选项动态填充建议的ForeignKey值?

时间:2016-03-09 21:38:09

标签: python django django-models django-admin

有没有办法在Django Admin中动态更改SelectFields中为ForeignKeys显示的值?无需编写一些可以执行此操作的自定义JS。

说,我有两个模型:主题 AreaOfDiscussion 。 主题有一个讨论区域,如

class Topic(models.Model):
    area = models.ForeignKey(AreaOfDiscussion, null=False)

现在我添加了讲座模型,该模型必须同时包含主题和区域。

class Lecture(models.Model):
     area = models.ForeignKey(AreaOfDiscussion, null=False)
     topic = models.ForeignKey(Topic, null=False)

我希望用户(管理面板)能够先选择一个区域,然后根据选择,为他/她提供所选区域的可用主题列表。这可以实现吗?

2 个答案:

答案 0 :(得分:0)

首先设置topic = models.Fk(...,null = True)

class AdminLecture(admin.ModelAdmin):
    object = None

    def get_object(self, request, object_id):
        self.object = super(AdminLecture, self).get_object(request, object_id)
        return self.object

    def formfield_for_foreignkey(self, db_field, request, **kwargs):

        if self.object and db_field.name == 'topic':
            kwargs['queryset'] = Topic.objects.filter(area=self.object.area)
        return super(AdminLecture, self).formfield_for_foreignkey(db_field, request, **kwargs)

然后按保存和cotinue编辑

答案 1 :(得分:0)

您可以使用django-smart-selects软件包: https://github.com/digi604/django-smart-selects