过滤 django admin 多对一编辑器

Rok*_*ner 2 python django django-admin

编辑对象时如何过滤 django 管理页面中下拉字段的内容?例子:

class Question(models.Model):
    creator = models.ForeignKey(User)
    body = models.CharField(max_length=200)
    category = models.ForeignKey(Category)

class Category(models.Model):
    name = models.CharField(max_length=200)
    creator = models.ForeignKey(User)

class QuestionAdmin(TeacherModelAdmin):
    fieldsets = [
        (None, {'fields': ['body', 'category']}),
    ]
    #Filter by request.user == creator ?
Run Code Online (Sandbox Code Playgroud)

Pra*_*wal 5

您可以覆盖formfield_for_foreignkey管理中的方法

class QuestionAdmin(TeacherModelAdmin):
    def formfield_for_foreignkey(self, db_field, request, **kwargs):
    if db_field.name == "category":
        kwargs["queryset"] = Category.objects.filter(creater=request.user)
    return super(QuestionAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
Run Code Online (Sandbox Code Playgroud)