Django: Как очистить данные при list_editable на странице администратора?

У меня есть модель, в которой есть поле 'keywords'. Когда я использую форму для создания/изменения записей, я могу очистить это поле и затем сохранить его.

class ILProjectForm(forms.ModelForm):

    class Meta:
        models = ILProject
        fields = '__all__'


    def clean_keywords(self):
        k = self.cleaned_data.get('keywords')
        if k:
            k = ','.join([a.strip() for a in re.sub('\\s+', ' ', k).strip().split(',')])
        return k

Однако я не уверен, как запустить clean() для обновления данных, когда я использую опцию list_editable на странице администратора.

Я пробовал что-то вроде этого бита, но получаю ошибку, говорящую, что я не могу установить атрибут. Каков правильный способ обновления данных после их очистки?

class MyAdminFormSet(BaseModelFormSet):

    def clean(self):
        print(type(self.cleaned_data))
        recs = []
        for r in self.cleaned_data:
            if r['keywords']:
                r['keywords'] = ','.join([a.strip() for a in re.sub('\\s+', ' ', r['keywords']).strip().split(',')])
                print(r['keywords'])
            recs.append(r)
        self.cleaned_data = recs      <-- this part is problematic.

class ILProjectAdmin(...)
...
        def get_changelist_formset(self, request, **kwargs):
            kwargs['formset'] = MyAdminFormSet
            return super().get_changelist_formset(request, **kwargs)

Это должно быть так:

class ILProjectAdmin(...)
    ... 
    def get_changelist_form(self, request, **kwargs):
            return ILProjectForm

Пожалуйста, обратитесь к этому совету: Django: Доступ к объекту запроса из формы admin.clean()

class ProjectRequestForm(forms.ModelForm):
    class Meta:
        model = ProjectRequest

    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop('request', None)
        super(ProjectRequestForm, self).__init__(*args, **kwargs)
        
    def clean(self):
        if self.request.user.has_perm('access_role'):
            raise ValidationError(f'No permission', code='invalid')


class ProjectRequestAdmin(admin.ModelAdmin):

    def get_form(self, request, obj=None, **kwargs):
        form = super(ProjectRequestAdmin, self).get_form(request, obj, **kwargs)

            class AdminFormWithRequest(form):
                def __new__(cls, *args, **kwargs):
                    kwargs['request'] = request
                    return form(*args, **kwargs)            
        return AdminFormWithRequest

    def get_changelist_form(self, request, **kwargs):
        class AdminFormWithRequest(ProjectRequestForm):
            def __new__(cls, *args, **kwargs):
                kwargs['request'] = request
                return ProjectRequestForm(*args, **kwargs)            
        return AdminFormWithRequest    
Вернуться на верх