如何使用 StackedInline 类使现有模型对象只读但也能够创建新模型对象?

我有两个名为“消息”和“票证”的模型。消息有一个外键到工单。我使用 StackedInline 在 django admin 中显示了票证消息。但问题是我希望已经创建的消息是只读的,同时也能够创建新消息。


我也检查了一堆问题;像这样或这样。但没有一个是有帮助的!或者至少,我无法得到线索!


这是我的代码:


模型.py:


class Ticket(models.Model):

    title = models.CharField(max_length=128)

    #...


class Message(models.Model):

    text = models.TextField()

    ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE)

    attachment = models.FileField(upload_to=some_url_pattern)

    sender = models.CharField(max_length=2, editable=False)

管理员.py:


class MessageInline(admin.StackedInline):

    model = Message

    extra = 1


    def get_readonly_fields(self, request, obj=None):

        if obj:

            return ['text', 'attachment']

        else:

            return []



@admin.register(Ticket)

class ResponderAdmin(admin.ModelAdmin):

    fields = ['title']

    inlines = [MessageInline]

可以看出,我试图通过覆盖来实现目标,get_readonly_fields但这就是发生的事情: 管理页面的截图


从图片中可以看出,每条消息内联都已设为只读,我无法添加新消息......


谁能帮我解决这个问题?


慕尼黑5688855
浏览 207回答 1
1回答

慕后森

我假设这是给管理员的。删除用户的超级用户访问权限,但保留他们的员工访问权限。然后使用权限来授予他们Add和访问特定模型的权限,但不要授予他们Update或Delete访问权限。这应该使他们能够查看数据而无法更改或删除它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python