Как обновить атрибуты данных, связанные с полями M2M, в Django

Я хочу обновить значение голоса каждого кандидата, которое связано с полем m2m определенных избирательных округов. У меня есть функция обновления избирательных округов, где пользователь обновляет избирательные округа, но в моем случае я также хочу обновить значение голосов кандидатов, которое приходит из object in object.candidates.all


class Candidates(models.Model):

    name = models.CharField(max_length=100)
    votes = models.PositiveBigIntegerField(default=0)

class Constituencies(models.Model):
    candidates = models.ManyToManyField(Candidates)

views.py

def constituency_detail(request, pk):
    obj = get_object_or_404(Constituencies, id=pk)
    form = ConstituenciesForm(request.POST or None, instance=obj)

    if request.method == 'POST':
        pass

template.html

<h5>{{ object }}</h5>

{% for object in object.candidates.all %}
<h5>{{ object }}</h5>
{{ object.votes }} as input field  
{% endfor %}

Когда у вас есть <model name>.objects.all(), вы получаете запрос, заданный ответом.

В вашем случае, если вы хотите увеличить счетчик каждого объекта, вы можете просто перебрать все эти объекты в цикле.

Примером может быть:

# this will return a list of objects which is QuerySet
candidates = Candidates.objects.filter("apply your filter here")

for candidate in candidates:
    candidate.vote += 1
    candidate.save()

Вы можете использовать функцию Django ORM update() с объектом F():

Candidate.objects.filter(...).update(votes=F('votes') + 1)

https://docs.djangoproject.com/en/4.0/ref/models/querysets/#django.db.models.query.QuerySet.update

Редактирование:

Ваши голоса - это поле Integer, предположительно, голоса отдаются как-то иначе - лучшим методом было бы иметь модель Vote, которая отслеживает другую информацию - тогда вы можете использовать ORM для подсчета количества голосов, прикрепленных к каждому кандидату

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