Добавление столбца по условию в 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_logs в UserQuiz.


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 the User model [Django-doc] directly. For more information you can see the referencing the User model section of the documentation.


Примечание: Обычно не добавляют суффикс _id к полю ForeignKey, так как Django автоматически добавит поле-"близнец" с суффиксом _id. Поэтому он должен быть user, вместо user_id.

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