Правильный способ изменения данных перед сохранением модели через сайт администратора

Django 4.1

models.py

class Video(models.Model):
    phrase_id = models.IntegerField(default=-1,
                                    blank=False,
                                    null=False,
                                    validators=[MinValueValidator(0)])

    # This field will be read only in the admin site.
    # Its only purpose is to ensure cascade deletion.
    _phrase = models.ForeignKey("vocabulary_phrases.Phrase",
                                on_delete=models.CASCADE,
                                default="",
                                blank=True,
                                null=True)

admin.py

class VideoAdmin(admin.ModelAdmin):
    list_display = ["phrase_id", "name", ]
    list_filter = ['phrase_id']
    readonly_fields = ('_phrase',)
    form = VideoForm
admin.site.register(Video, VideoAdmin)

forms.py

class VideoForm(ModelForm):


    def clean(self):
        if ("phrase_id" in self.changed_data) and self.cleaned_data.get("phrase_id"):
            phrase_id = self.cleaned_data["phrase_id"]
            _phrase = _get_phrase(phrase_id)
            self.cleaned_data["_phrase"] = _phrase
        return self.cleaned_data


    class Meta:
        model = Video
        exclude = []

В админке пользователь вставляет целое число для phrase_id. Затем в форме администратора я хотел заменить self.clean_data на экземпляр фразы, который я извлекаю из базы данных.

Проблема в том, что после сохранения, поле _phrase пустое.

Вот документация: https://docs.djangoproject.com/en/4.1/ref/forms/validation/

Читать далее:

Метод clean() подкласса формы... Этот метод может вернуть совершенно другой словарь, который будет использоваться как очищенные_данные

Ну, я изменил clean_data, но, похоже, это не влияет на то, что сохраняется. Моя идея была такова: данные проверяются перед сохранением, подставьте очищенные_данные, тогда ваши собственные данные будут сохранены. Похоже, я ошибся

Могли бы вы помочь мне понять правильный способ изменения данных перед сохранением модели через админку сайта.

Вернуться на верх