Как правильно написать условие в представлении Django?
Смысл программы заключается в выборе аналогов из списка и их связывании. Я связываю все значения.
Думаю, что проблема в неправильном if
. Как это исправить
Мой view
:
def editpart(request, id, **kwargs):
if request.method == 'POST':
part.name = request.POST.get("name")
part.description = request.POST.get("description")
analogs = Part.objects.all()
for analog_zap in analogs:
analog = analog_zap.analog
if Part.objects.filter(analog_analog = analog):
part.analog.add(analog_zap.id)
Мой model
:
class Part(models.Model):
name = models.CharField('Название', max_length=100)
analog = models.ManyToManyField('self', blank=True, related_name='AnalogParts')
Я просто предположу, что вы получили объект part
перед тем, как попытаться присвоить следующее:
part.name = request.POST.get("name")
part.description = request.POST.get("description")
Независимо от того, предназначалось ли это для обновления объекта "retrieved part object" или нет, я бы рекомендовал вместо этого иметь две свежие переменные для сбора информации из post
request
, а затем обновить объект part
этими переменными, если в базе данных будет найдена какая-либо связанная информация.
name = request.POST.get("name")
description = request.POST.get("description")
Что касается настоящего вопроса... Я не уверен, что хорошо понимаю ваш вопрос, но я вижу проблему с одним из ваших if statements
. У вас есть:
for analog_zap in analogs:
analog = analog_zap.analog
if Part.objects.filter(analog_analog = analog): # problem here...
part.analog.add(analog_zap.id)
Как вы написали:
class Part(models.Model):
name = models.CharField('Название', max_length=100)
analog = models.ManyToManyField('self', blank=True, related_name='AnalogParts') # right here...
У Part
model
есть поле analog
, а не analog_analog
: возможно, вы имели в виду analog__analog
. Но, возможно, вам стоит попробовать проверить на: if Part.objects.filter(analog__pk=analog.pk)
или if Part.objects.filter(analog__in=[analog]).distinct()
.
Кроме того, вы можете захотеть проверить, есть ли что-то exists
, поэтому добавьте .exists()
в конец if Part.objects.filter(analog__pk=analog.pk)
. Пример:
if Part.objects.filter(analog__pk=analog.pk).exists():
...
Похоже:
for analog_zap in analogs:
analog = analog_zap.analog
if Part.objects.filter(analog__pk=analog.pk).exists():
part.analog.add(analog_zap.id)
# update the name and description here as well with the values retrieved from the post request
part.name = name
part.description = description
Вы можете попробовать.