【问题标题】:Limiting the options of foreign key in ModelAdmin returns "Select a valid choice"在 ModelAdmin 中限制外键选项返回“选择一个有效的选择”
【发布时间】:2017-06-15 00:27:17
【问题描述】:

我试图将选项限制为特定用户的管理应用程序中的外键(我试图限制的字段称为学校)。这就是我的代码的样子 - 不幸的是,当我尝试编辑一个学生(通过点击他们的名字)时,有两个问题(如下所述)。

1.学校的默认值为--

2.当我从下拉列表中选择正确的学校并尝试保存时,我在学校字段上看到错误提示

选择一个有效的选项。该选择不是可用的选项之一 选择。

这就是它的样子

class modelStudentAdmin(admin.ModelAdmin):   

     def get_queryset(self, request):
        qs = super(modelStudentAdmin, self).get_queryset(request)

        if request.user.is_superuser:
            return qs
        else:
            schoolInstance = modelSchool.objects.get(user=request.user)
            qs = modelStudent.objects.filter(school=schoolInstance)
            return qs

    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if request.user.is_superuser:
            return super(modelStudentAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

        #Not superuser only staff
        if db_field.name == 'school':
            t = modelSchool.objects.filter(user=request.user).values_list("school_name",flat=True)
            kwargs['queryset'] = t

        return super(modelStudentAdmin,self).formfield_for_foreignkey(db_field, request, **kwargs)

现在如果我删除方法

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

一切正常,但我无法限制外键。关于我可能做错的任何建议?

【问题讨论】:

    标签: django django-models django-modeladmin


    【解决方案1】:

    尝试替换

     t = modelSchool.objects.filter(user=request.user).values_list("school_name",flat=True)
    

    有了这个

    modelSchool.objects.filter(user=request.user)
    

    您不需要 value_list 您的查询集。

    【讨论】:

      猜你喜欢
      • 2021-08-04
      • 1970-01-01
      • 1970-01-01
      • 2021-02-22
      • 2016-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-21
      相关资源
      最近更新 更多