【问题标题】:django admin tabularinline limit foreign key choice fieldsdjango admin tabularinline 限制外键选择字段
【发布时间】:2016-08-01 07:37:59
【问题描述】:

我正在使用 django admin tabular-inline 管理界面。

模型.py

class Issues(TimeStampedModel):
    issue_owner = models.ForeignKey(USER_MODEL, related_name='issue_owner')
    issue_no = models.CharField(max_length = 500, null = True, blank = True)

class IssueComments(TimeStampedModel):
    comment_owner = models.ForeignKey(USER_MODEL, related_name='comment_owner')
    issue = models.ForeignKey(Issues, null=True, blank=True)
    comment = models.TextField(null=True, blank=True)

我正在尝试在管理中使用表格内联

admin.py

class IssueCommentsAdmin(admin.TabularInline):
    model = IssueComments
    extra = 1

    def formfield_for_foreignkey(self, db_field, request=None,**kwargs):
        field = super(IssueCommentsAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
        if db_field.name == 'comment_owner':
            if request.user is not None:
                field.queryset = field.queryset.filter(username = request.user.username)
                if not field.queryset:
                    field.queryset = field.queryset.all()
            else:
                field.queryset = field.queryset.none()
        return field

class IssuesAdmin(admin.ModelAdmin):
    model = Issues
    list_display = ('issue_no', 'title', 'owner_phone_number', 'status', 'issue_priority', 'classification')
    inlines = [ IssueCommentsAdmin ]

    def render_change_form(self, request, context, *args, **kwargs):
        context['adminform'].form.fields['assigned_to_user'].queryset = User.objects.filter(is_staff=True)
        return super(IssuesAdmin, self).render_change_form(request, context, args, kwargs)

我想将 comment_owner 限制为仅在选择字段中登录的用户。我也能够做到这一点,但我在这里面临的问题是对于已经拥有我想保持原样的 comment_owner 的 cmets。 这里有 comment_owner 的 cmets 没有被预选。

【问题讨论】:

  • PLS 显示错误,谢谢
  • 未收到任何错误,但comment_owner 为已分配评论所有者的空白。
  • 确定:field.queryset.filter(username = request.user.username) 可能:qs = super(IssueCommentsAdmin, self).get_queryset(request) return qs.filter(issue_owner =request. user.id)

标签: python django django-admin django-admin-filters


【解决方案1】:

有点晚了,但是对于任何人来说

您应该在 admin.py 中创建另一个模型管理类并为此对象授予权限。我建议你改变你的类名。

class IssueCommentsInline(admin.TabularInline):
    ...

class IssueCommentsAdmin(admin.ModelAdmin):
     ...

admin.site.register(IssueComments,IssueCommentsAdmin)

这样,您可以使用get_queryset编辑所有数据,使用get_field_queryset编辑字段数据。

问候!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 2020-07-25
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    相关资源
    最近更新 更多