Как правильно написать условие в представлении 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

Вы можете попробовать.

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