Разъем драйвера не находится в вашем пути сборки. Настройте путь сборки и укажите его в «mysql-connector-java-5.1.25-bin.jar» (проверьте версию, которую вы используете). В качестве альтернативы вы можете использовать maven: D
Все ваши объекты обновляются с тем же total
для каждого элемента из-за этой строки (строка 44 из actualizar_cantidad
):
qs_total.update(total=s_total)
Вы определили qs_total = model.objects.values('total')
, который означает каждый объект класса model
, поэтому, когда вы вызываете update
, вы обновляете все из них.
Чтобы исправить это, переопределите qs_total только для объекта или объектов, которые вам интересны в обновлении, используя filter
, или удалите эту строку.
О вашем вопросе qs_total.update(total=s_total)
будет обновлять каждый объект, который имеет эту же общую сумму, чтобы быть конкретным и обновлять только один, вы должны передать какое-то уникальное значение в качестве id
. В этой строке кода qs_total = model.objects.values('total')
Не используйте ключевое слово «model», это приходит к вам в виде текста, поэтому имя вашего класса в строке dont означает, что это экземпляр класса, вам нужно сначала его получить, а затем запустить запрос
Предложение : Я сделал что-то подобное раньше, я надеюсь, что это вам поможет, или, может быть, вы можете что-то улучшить в своем основном коде
'''
In this version accepts only integer or decimal fields
Parameters:
1 - Queryset
2 - Column Name(String)
3 - Filter(String):
- Less Than Equal - "-<valor>" | Example: "-250"
- Between - "<valor>~<valor>" | Example: "250~350"
- Greater Than Equal - "+<valor>" | Example: "+15"
'''
def dinamic_filter(queryset, column, filter):
if '-' in filter:
filter = filter.replace('-','')
queryset = queryset.filter(**{'{column}__lte'.format(column=column):int(filter)})
elif '~' in filter:
values = filter.split('~')
if values[0] and values[1]:
less = valores[0]
greater = valores[1]
queryset = queryset.filter(**{'{column}__range'.format(column=column):(less, greater)})
else:
raise ValidationError('Wrong Value {filter} of column {column}'.format(filter=filter, column=column))
elif '+' in filtro:
filter = filter.replace('+','')
queryset = queryset.filter(**{'{column}__gte'.format(column=column):int(filter)})
return queryset
Источник: https://github.com/Diegow3b/django -dinamic-QuerySet-фильтр
get
вместоfilter
было бы лучше в этой ситуации, так как вы заинтересованы только в получении одного объекта, аget
возвращает один объект вместо набора запросов. – Henry Woody 13 July 2018 в 18:28qs_total.filter(pk=pk).update(total=s_total) qs_total.get(pk=pk).update(total=s_total)
при использовании фильтра () обновляет только первый элемент в моей БД, используя get () , не обновляет какие-либо элементы – victorR 13 July 2018 в 18:37update
- это метод запроса, а не объект. Поэтому вы должны использоватьfilter
. – Henry Woody 13 July 2018 в 18:43