【问题标题】:django admin inline fields options filtered based on main form field valuedjango admin内联字段选项根据主表单字段值过滤
【发布时间】:2021-01-07 17:13:21
【问题描述】:

我有以下型号:

class Organizations(models.Model):
    name = models.CharField(max_length=30,unique=True)

class Postcodes(models.Model):
    organization = models.ForeignKey(Organizations,on_delete=models.PROTECT)
    postcode = models.PositiveBigIntegerField()

class Agent(models.Model):
    organization = models.ForeignKey(Organizations,on_delete=models.PROTECT)
    name = models.CharField(max_length=50)

class AgentPostcodes(models.Model):
    agent= models.ForeignKey(Agent,on_delete=models.PROTECT)
    postcode = models.ForeignKey(Postcodes,on_delete=models.PROTECT)

而 admin.py 是

class AgentPostcodesInline(admin.TabularInline):
    model = AgentPostcodes

class AgentAdmin(admin.ModelAdmin):
    list_display = ['organization','name']
    inlines = [AgentPostcodesInline]    

我如何才能根据组织过滤内联表单字段,以获取仅与该组织相关的邮政编码。 目前它显示所有组织的邮政编码,甚至与代理无关。

【问题讨论】:

    标签: django django-models django-forms django-admin django-admin-filters


    【解决方案1】:

    覆盖TabularInline(InlineModelAdmin)get_queryset方法类似于documentation中描述的方法:

    ModelAdmin.get_queryset(request)
    

    ModelAdmin 上的 get_queryset 方法返回一个包含所有 可以由管理站点编辑的模型实例。一个用例 覆盖此方法是显示登录用户拥有的对象:

    class MyModelAdmin(admin.ModelAdmin):
        def get_queryset(self, request):
            qs = super().get_queryset(request)
            if request.user.is_superuser:
                return qs
            return qs.filter(author=request.user)
    

    【讨论】:

    • 另外,这可能会进一步帮助您stackoverflow.com/questions/32150088/…
    • Inline 如何从主窗体中获取组织?简而言之就是这个问题。 get_form 和 form.base_field["organization"],选择的值我无法获取并且使用 formfield_for_foreignkey() 可以再次查询该字段而不是单个值。 :(
    猜你喜欢
    • 2018-03-31
    • 2019-03-22
    • 1970-01-01
    • 2011-06-15
    • 2017-01-31
    • 2016-07-20
    • 2014-07-03
    • 2013-02-10
    • 1970-01-01
    相关资源
    最近更新 更多