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
Не могу проверить это прямо сейчас, но если вы не можете редактировать элемент, возможно, он также не сохраняется.