Метод сохранения Django ModelAdmin не выполняется
У меня есть пользовательский класс ModelForm и класс ModelAdmin, и по какой-то причине мой метод save_model не выполняется
Покажу оба класса, которые я сейчас имею в admin.py. все функции (поиск, фильтр, скрытие полей, удаление) сейчас работают правильно, кроме сохранения новой записи...
вот моя форма:
class SeasonalityOriginalsForm(forms.ModelForm):
# defining the input fields that should be hidden
class Meta:
model = SeasonalitiesCalculated
fields = '__all__'
widgets = {
'has_been_reviewed': forms.HiddenInput(),
'user': forms.HiddenInput(),
'source_importance_0least_to_10most': forms.HiddenInput(),
'internal_id': forms.HiddenInput(),
}
### this defines a dropdown selector field for object_id
### instead of copy-pasting the UUID from another adminmodel page, which could bring errors
### admins can now select the country or admin_zone_1 with the right granularity by selecting location name
### an issue is that this is a choicefield, not a model choicefield.
### this issue is solved in the save_model method in the ModelAdmin class.
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
logger.debug(f'self model info: {type(self.fields)}')
countries = Countries.objects.filter(level_of_seasonal_area_granularity='country')
admin_zones1 = AdminZones1.objects.filter(country__level_of_seasonal_area_granularity='admin_1')
choices = [(obj.public_id, str(obj)) for obj in countries] + [(obj.public_id, str(obj)) for obj in admin_zones1]
self.fields['object_id'] = forms.ChoiceField(choices=[])
self.fields['object_id'].choices = choices
logger.debug(f'self model info2: {self.fields}')
### here are the visible input fields of the
object_id = forms.ChoiceField(choices=[])
content_type = forms.ModelChoiceField(
queryset=ContentType.objects.filter(model__in=['countries', 'adminzones1']),
widget=forms.Select(attrs={'class': 'form-control'})
)
seasonality = forms.DecimalField(min_value=Decimal('0'), max_value=Decimal('1'), decimal_places=1)
Вот мой класс ModelAdmin:
### define SeasonalityOriginalsAdmin for ContributorAdmin
class SeasonalityOriginalsAdmin(admin.ModelAdmin):
form = SeasonalityOriginalsForm
### modifying the search method for the searchfield
def get_search_results(self, request, queryset, search_term):
#... skipping this for now
### defining that existing fields are readonly
def get_readonly_fields(self, request, obj=None):
if obj: # editing an existing object
return [field.name for field in self.model._meta.fields]
return []
### not allowing delete permissions
def has_delete_permission(self, request, obj=None):
return False
### save method modification
def save_model(self, request, obj, form, commit=True):
logger.debug(f'tried several logs and print statements here but none show')
location_name = self.cleaned_data['object_id']
location = Countries.objects.filter(country_name=location_name).first() or AdminZones1.objects.filter(admin_zone_name=location_name).first()
self.object_id = location.pk
max_internal_id = self.model.objects.filter(internal_id__isnull=False).aggregate(Max('internal_id'))['internal_id__max']
obj.internal_id = max_internal_id + 1 if max_internal_id is not None else 1
if request.user.is_contributor:
obj.source_importance_0least_to_10most = 10
else:
obj.source_importance_0least_to_10most = 3
obj.user = request.user
return super().save(commit)
### defining the displayed rows, fields and search field
list_per_page = 20
list_display = ('ingredient_original', 'content_object','seasonality')
search_fields = ('seasonality_originals__public_id', 'ingredient_original__ingredient_original_name_en',)
ordering = ('ingredient_original',)
должно быть что-то не так с моим методом сохранения, потому что он даже не выполняет любые логи, которые я помещаю в кодовый блок...
у моей модели нет пользовательского метода сохранения
заранее спасибо за помощь!!!!!