Django - Изменить поле внешнего ключа при обновлении основного поля - PullRequest
0 голосов
/ 27 марта 2020

У меня есть вопрос. У меня есть отношение (многие ко многим) между двумя классами, и я хотел бы, чтобы при создании отношения обновлялось поле.


class Question(models.Model):
    intitule = models.TextField(verbose_name="name")
    matched = models.BooleanField(verbose_name="matched", default=True)
    asked = models.IntegerField(verbose_name="was asked", default=1)

    class Meta:
        ordering = ['intitule']

    def __str__(self):
        return str(self.matched) + " [" + str(self.asked) + "]" + " - " + self.intitule
class Reponse(models.Model):
    reponse = RichTextField()
    question = models.ManyToManyField(Question)

    def __str__(self):
        return self.reponse

Вот мой вопрос: когда я создаю Объект «Ответ» в интерфейсе администратора, и я выбираю вопрос, я хотел бы обновить атрибут «соответствует» в вопросе автоматически. Как я могу это сделать?

Большое спасибо.

1 Ответ

0 голосов
/ 27 марта 2020

Сделайте это в вашем admin.py

from django.contrib import admin

from .models import Question, Reponse


@admin.register(Reponse)
class ResponseAdmin(admin.ModelAdmin):
    def save_model(self, request, obj, form, change):
        obj.user = request.user

        try:
            ques = form.cleaned_data['question'].all()
            for old_que in obj.question.all():
                if old_que not in ques:
                    old_que.matched = True
                    old_que.save()
        except:
            pass

        for que in form.cleaned_data['question'].all():
            que.matched = False
            que.save()

        super().save_model(request, obj, form, change)


admin.site.register(Question)
...