Как сделать существующие объекты модели доступными только для чтения, а также иметь возможность создавать новые, используя класс StackedInline? - PullRequest
1 голос
/ 22 апреля 2019

У меня есть две модели: «Сообщение» и «Билет». Сообщение имеет иностранный ключ для билета. Я показал «Сообщения билета» в админке django, используя StackedInline. Но проблема в том, что я хочу, чтобы уже созданные сообщения были доступны только для чтения, а также возможность создавать новые сообщения.

Я также проверил кучу вопросов; как это или это . Но ничего из этого не помогло! Или, по крайней мере, я не мог получить ключ!

Это мой код:

models.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)

admin.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, но вот что произошло: скриншот страницы администратора

Как видно на картинке, каждое встроенное сообщение было сделано только для чтения, и я не могу добавить новое сообщение ...

Может кто-нибудь помочь мне с этим вопросом?

1 Ответ

0 голосов
/ 22 апреля 2019

Я предполагаю, что это для администратора.

Удалите доступ суперпользователя пользователя, но оставьте ему доступ персонала. Затем используйте разрешения для предоставления им Add и доступа для конкретной модели, но не предоставляйте им Update или Delete доступ. Это должно позволить им просматривать данные без возможности их изменения или удаления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...