Есть две модели:
class Question(models.Model):
question_text = models.CharField(max_length=200)
count_choice= models.IntegerField(default=0)
pub_date = models.DateTimeField('date published')
def __str__(self):
return self.question_text
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
def __str__(self):
return self.choice_text
Вид из admin django
Мне необходимо, что бы при создании в колонку count_choice модели question записывалось кол-во choice, как это сделать?
Ответ
В admin.py
class QuestionAdmin(admin.ModelAdmin):
def save_formset(self, request, form, formset, change):
super(QuestionAdmin, self).save_formset(request, form, formset, change)
obj = form.save(commit=False)
choices_count = Choice.objects.filter(question=obj).count()
obj.count_choice=choices_count
obj.save()
Обратите внимание, что в этом варианте переопределяется метод QuestionAdmin, а не ChoiceAdmin. И срабатывает он при любых операциях, не только создании. Можно добавить проверку аргумента change, но тогда count_choice будет иметь неверное значение при удалении вариантов.
Комментариев нет:
Отправить комментарий