Когда я создаю пользовательские разрешения, после сохранения автоматически удаляются сохраненные разрешения в Django
В классе администратора Django для страницы создания группы я добавил дополнительные поля. На основе этих полей мне нужно отфильтровать и установить разрешения для группы. Однако проблема возникает в методе сохранения. Хотя он сохраняет разрешения, во время отладки я заметил, что метод save_m2m() в суперклассе удаляет все назначенные разрешения
class CustomGroupForm(forms.ModelForm):
env_name = forms.CharField(max_length=100, required=False)
schema_name = forms.CharField(max_length=100, required=False)
class Meta:
model = Group
fields = ['name', 'permissions', 'env_name', 'schema_name']
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['permissions'].queryset = Permission.objects.none()
def save(self, commit=True):
group = super().save(commit=False)
# Use the name field as the prefix to filter permissions
name = self.cleaned_data.get('name', '')
prefix = name
logger.info(f'Prefix 1: {prefix}')
# Filter permissions using the prefix
filtered_permissions = Permission.objects.filter(
content_type__app_label__startswith=prefix
)
# Save the group first to ensure it has an ID
group.save()
# Set the filtered permissions
group.permissions.set(filtered_permissions)
if commit:
group.save()
return group
Я ожидал, что пользовательская логика в методе save будет корректно сохранять отфильтрованные разрешения для группы без перезаписи. В частности, я хотел, чтобы динамически отфильтрованные разрешения сохранялись после сохранения, а метод save_m2m() не очищал их.