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)