【问题标题】:Django 1.7 show links to change forms in a inline tablur viewDjango 1.7 显示链接以更改内联 tablur 视图中的表单
【发布时间】:2015-12-30 04:03:12
【问题描述】:

我在 ModelAdmin 类中有一个内联表格视图 (GenericTabularInline)。我需要添加链接以更改该内联表格视图中的表单。这是一些参考代码

class StudentActionInline(generic.GenericTabularInline):
    model = StudentActionInline
    ordering = ('roll_no',)


class CaptainAdmin(admin.ModelAdmin):
    inlines = [
        StudentActionInline
    ]

我想在内联表格视图中添加一个链接以更改学生模型(更改学生模型的表单)。这是在 Django 1.7 中

【问题讨论】:

  • 如果我理解正确的话,Student 模型是在管理员那里注册的,您只想添加一个链接到与内联表单中的 StudentActionInline 关联的学生实例的更改页面?我假设 StudentActionInline 对 Student 有一个 fk?

标签: django django-models django-admin


【解决方案1】:

我不确定它是否受到鼓励,但这是我过去解决这个问题的方法。

class StudentActionInline(generic.GenericTabularInline):
    model = StudentActionInline
    ordering = ('roll_no',)

    def edit_student(self, obj):
        # Use the obj here to get a student pk and the admin url
        return '<a href="link_goes_here">Edit student</a>'
    edit_student.allow_tags = True
    edit_student.short_description = 'Edit student'

    def get_readonly_fields(self, request, obj=None):
        fields = super(StudentActionInline, self).get_readonly_fields(request, obj)

        if obj and obj.pk:
            # It's important to not make modifications
            # to the fields directly.
            fields = list(fields) + ['edit_student']
        return fields

Django 管理员允许“动态”只读字段,因此我修改了 get_readonly_fields 方法,仅在学生操作存在而不是新的(无 pk)时添加 edit_student 字段,这是为了避免学生操作没有附加到学生它还没有,因为它是空白的。

请注意,如果您对 StudentActionInline 的管理员定义定义了字段或字段集,那么您还必须在其中添加 edit_student。

【讨论】:

    猜你喜欢
    • 2011-04-29
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    相关资源
    最近更新 更多