Добавление столбца по условию в django
Это моя модель
class User_quiz_logs(models.Model):
user_id = models.ForeignKey(User, on_delete=models.CASCADE, null=False)
user_quiz_id = models.AutoField(primary_key=True)
response = models.CharField('response ', max_length=300, null=False)
points = models.IntegerField('points', null=True)
state_quiz = models.BooleanField('state', default=False)
имеет атрибут points, который я хочу добавить, если он соответствует тому же человеку?
Пример
1 A 1 true 141
2 A 1 true 141
3 A 1 true 141
4 B 5 true 165
5 C 1 true 165
У человека с id 141 общая сумма баллов будет 3, а у id 165 - 6 баллов.
Вы можете .annotate(…) [Django-doc] с:
from django.db.models import Q, Sum
User.objects.annotate(
points=Sum('user_quiz_logs__points', filter=Q(user_quiz_logs__state_quiz=True))
)
Объекты User, возникающие из этого QuerySet, будут иметь дополнительный атрибут .points, который будет содержать общую сумму points связанных user_quiz_logs для этого User.
Примечание: Модели в Django пишутся в PascalCase, а не snake_case, поэтому вы можете переименовать модель из
вUser_quiz_logsUserQuiz.
Note: It is normally better to make use of the
settings.AUTH_USER_MODEL[Django-doc] to refer to the user model, than to use theUsermodel [Django-doc] directly. For more information you can see the referencing theUsermodel section of the documentation.
Примечание: Обычно не добавляют суффикс
._idк полюForeignKey, так как Django автоматически добавит поле-"близнец" с суффиксом_id. Поэтому он должен бытьuser, вместо.user_id