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