TooManyFieldsSent Возникает при сохранении admin.ModelAdmin с TabularInline даже с неизменными полями

Всякий раз, когда я пытаюсь сохранить без редактирования каких-либо полей в Author на странице администратора, я получаю ошибку TooManyFields. Я знаю, что могу просто установить это в settings.py.

DATA_UPLOAD_MAX_NUMBER_FIELDS = None 
# or DATA_UPLOAD_MAX_NUMBER_FIELDS = some_large_number 

Однако отсутствие ограничения открывает вектор атаки и создает угрозу безопасности. Я бы хотел избежать такого подхода, насколько это возможно.

В моей модели администратора AuthorAdmin есть модель TabularInline под названием PostInline.

admin.py

    class AuthorAdmin(admin.ModelAdmin)
        inlines = [PostInline]

    class PostInline(admin.TabularInline)
        model = Post

Модели

    class Author(models.Model):
        name = models.CharField(max_length=100)
        
        def __str__(self): 
            return str(self.name)

    class Post(models.Model):
        title = models.CharField(max_length=100)
        author = models.ForeignKey(Author, on_delete=models.CASCADE)

        def __str__(self):
            return str(self.title)
     

Причина возникновения этой ошибки заключается в том, что Author может иметь несколько постов. При сохранении Author (без изменения полей) отправляется запрос POST, который включает post_id и post__series_id на основе количества постов этого автора. Это может легко превысить лимит, установленный по умолчанию Django, который установлен на 1000.

Есть ли способ не включать неизменные поля в запрос POST при сохранении? Или лучший подход к решению этой проблемы, не прибегая к обновлению DATA_UPLOAD_MAX_NUMBER_FIELDS?

Можете попробовать

class PostInline(admin.TabularInline)
    model = Post

    def has_change_permission(self, request, obj=None):
        return False

Не могу проверить это прямо сейчас, но если вы не можете редактировать элемент, возможно, он также не сохраняется.

Вернуться на верх