Сохранение поля данных django в другое поле той же таблицы

Добавляю + 10 к (поле session) и пытаюсь сохранить данные в (поле totalsession), чтобы totalsession отображался в таблице во фронтенде в новом сыром виде при каждом нажатии на кнопку. СПАСИБО

VIEWS.PY

    @api_view(['POST'])
def swimmersReduce(request, pk):
    sw = get_object_or_404(Swimmers,id=pk)  # gets just one record
    current_sessions = sw.sessions + 10
    sw.sessions = current_sessions  # updates just the one in memory field for sw (for the one record)
    sw.save()  # you may want to do this to commit the new value
    serializer = SubSerializer(instance=sw, data=request.data)
    if serializer.is_valid():
        serializer.save()
        return JsonResponse(serializer.data, safe=False, status=status.HTTP_201_CREATED)
    return JsonResponse(data=serializer.errors, safe=False, status=status.HTTP_400_BAD_REQUEST)

MODELS.PY

class Swimmers(models.Model):
    name = models.CharField(max_length=200, blank=False)
    lastname = models.CharField(max_length=200, blank=False)
    idno = models.CharField(max_length=200, blank=False, null=True)
    sessions = models.IntegerField(blank=False)
    totalsessions = models.IntegerField(blank=True, null=True)
    dateofpayment = models.CharField(max_length=200, blank=True)

Воспринимая ваш вопрос буквально, вы можете просто установить totalsessions равным sw.sessions и сохранить объект снова.

Однако я не могу не задаться вопросом, отслеживаете ли вы в этой таблице общее количество сеансов по всем пловцам? То есть у одного пловца может быть 10 занятий, но вы отслеживаете, скажем, 100 занятий по всем пловцам, но в каждом объекте пловца. Это не лучший способ структурирования ваших моделей. Вам следует использовать агрегацию ORM Django, если вы хотите управлять общим количеством сессий:

    total_sessions = Swimmers.objects.aggregate(Sum('sessions'))
    result: {'sessions__sum': 240}

https://docs.djangoproject.com/en/4.0/topics/db/aggregation/

Если вы действительно хотите хранить это в базе данных, тогда я бы предложил другую модель, которая отслеживает эти числа в одном объекте, а не все вместе.

Кстати, ваше соглашение об именовании моделей должно быть Swimmer, а не множественное число Swimmers

Редактировать

Чтобы лучше управлять занятиями по плаванию, создайте модель, подобную этой, с внешним ключом swimmer.

class SwimmingSession(models.Model):
   swimmer = models.ForeignKey(Swimmer, ...)
   # your other fields here, date, etc.

https://docs.djangoproject.com/en/4.0/topics/db/examples/many_to_one/

При создании сеанса плавания можно указать, к какому пловцу он относится. Каждый пловец может иметь любое количество сеансов плавания, чтобы получить количество сеансов плавания для каждого пловца, вы можете просто сделать:

swimmer = Swimmer.objects.get(pk=pk) # get a swimmer
total_sessions = swimmer.swimmingsession_set.count()

Чтобы получить общее количество занятий для всех пловцов, выполните следующие действия:

total_sessions = SwimmingSession.objects.count()
Вернуться на верх