Как обновить атрибуты данных, связанные с полями 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 для подсчета количества голосов, прикрепленных к каждому кандидату