Django MultiValueDictKeyError при обновлении поля модели

В моих моделях есть два поля imageFields. Когда я пытаюсь обновить только одно из них или просто изменить другое поле в моих моделях через 'Edit view', возникает ошибка MultiValueDictKeyError. Из-за ошибок, возникающих при обновлении, я решил выполнить сохранение вручную в представлениях. Интересно, не это ли является причиной ошибки. Я не вижу никаких ошибок в логике или в самом коде.

Мои взгляды:

def editTrucks(request, pk):
item = get_object_or_404(trucks, pk=pk)

if request.method == "POST":
    form = trucksForms(request.POST or None, request.FILES or None, instance=item)
    data = request.POST
    if form.is_valid():
        try:
            truck = trucks.objects.get(vin=data['vin'])
            truck.nickname = data['nickname']
            truck.make = data['make']
            truck.model = data['model']
            truck.type = data['type']
            truck.plate = data['plate']
            truck.ezPass = data['ezPass']
            truck.mileage = data['mileage']
            truck.reportedProblem = data['reportedProblem']
            truck.inspection = convert_date(data['inspection'])
            truck.registration = convert_date(data['registration'])
            truck.oilChange = data['oilChange']
            truck.isMonitored = data['isMonitored']
            truck.status = data['status']
            truck.title = request.FILES['title']
            truck.insurance_card = request.FILES['insurance_card']
            truck.save()

        except FileNotFoundError:
            truck_info = trucks(
                nickname=data['nickname'],
                make=data['make'],
                model=data['model'],
                type=data['type'],
                plate=data['plate'],
                vin=data['vin'],
                ezPass=data['ezPass'],
                mileage=data['mileage'],
                reportedProblem=data['reportedProblem'],
                inspection=convert_date(data['inspection']),
                registration=convert_date(data['registration']),
                oilChange=data['oilChange'],
                isMonitored=data['isMonitored'],
                status=data['status'],
                title=request.FILES['title'],
                insurance_card=request.FILES['insurance_card']
            )
            truck_info.save()
        return redirect('index')
else:
    form = trucksForms(instance=item)
    return render(request, 'Inventory/edit_items.html', {'form': form})

Моя модель:

class trucks(models.Model):
TYPE_CHOICES = (('Sedan', 'Sedan'), ('Pickup', 'Pickup'), ('SUV', 'SUV'), ('Flatbed', 'Flatbed'))
MON_CHOICES = (('Yes', 'Yes'), ('No', 'No'))

nickname = models.CharField(blank=False, null=True, default=None, max_length=80)
make = models.CharField(blank=False, null=True, default=None, max_length=80)
model = models.CharField(blank=False, null=True, default=None, max_length=80)
type = models.CharField(blank=False, null=True, choices=TYPE_CHOICES, default=None, max_length=80)
plate = models.CharField(blank=False, null=True, default=None, max_length=80)
vin = models.CharField(blank=False, null=True, default=None, max_length=80)
ezPass = models.CharField(blank=False, null=True, default=None, max_length=80)
mileage = models.CharField(blank=False, null=True, default=None, max_length=80)
reportedProblem = models.CharField(blank=False, null=True, default=None, max_length=80)
inspection = models.DateField(blank=False, null=True, default=None)
registration = models.DateField(blank=False, null=True, default=None)
oilChange = models.DateField(blank=False, null=True, default=None)
isMonitored = models.CharField(blank=False, null=True, choices=MON_CHOICES, default=None, max_length=80)
status = models.CharField(blank=False, null=True, default=None, max_length=80)
title = models.ImageField(null=True, blank=True, upload_to='title_pics/')
insurance_card = models.ImageField(null=True, blank=True, upload_to='insurance_cards/')

def __str__(self):
    return format(self.nickname)

Как я вижу, вы используете ModelForm, поэтому вам не нужно ничего из написанного вами кода, также я вижу, что ваши изображения установлены на blank и null.

So use this code as a view instead what you are using now


if request.method == "POST":
    form = trucksForms(request.POST or None, request.FILES or None, instance=item)
    if form.is_valid():
        form.save()
        return redirect('index')
    
else:
    form = trucksForms(instance=item)
Вернуться на верх