Можно ли создать форму редактирования с использованием хрустящей формы? - PullRequest
1 голос
/ 07 октября 2019

У меня есть форма с именем "CarForm". Я создал «Создать форму» для создания записи автомобиля с использованием хрустящей формы. Я хотел бы спросить, возможно ли отобразить детали и обновить запись автомобиля, используя ту же форму?

Вот код для CarForm:

from .models import *
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Submit, HTML, Row, Column
from crispy_forms.bootstrap import PrependedAppendedText, PrependedText, FormActions
from django.urls import reverse

class CarForm(forms.ModelForm):
    note = forms.CharField(widget=forms.Textarea())

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['note'].required = False
        self.fields['policy_num'].required = False
        self.helper = FormHelper()
        self.helper.form_method = 'POST'
        self.helper.form_action = reverse('create')
        self.helper.layout = Layout(
            Row(
                Column('reg_num', css_class='form-group col-md-6 mb-0'),
                Column('make', css_class='form-group col-md-6 mb-0'),
                Column('year', css_class='form-group col-md-4 mb-0'),
                Column('color', css_class='form-group col-md-4 mb-0'),
                Column('cc', css_class='form-group col-md-4 mb-0'),
                Column('engine_num', css_class='form-group col-md-6 mb-0'),
                Column('chasis_num', css_class='form-group col-md-6 mb-0'),
                css_class='form-row'
            ),
            'note',
            Row(
                Column(PrependedAppendedText('price_buy', 'RM','.00'), css_class='form-group col-md-6 mb-0'),
                Column(PrependedAppendedText('price_sell','RM','.00'), css_class='form-group col-md-6 mb-0'),
                Column('policy_num', css_class='form-group col-md-12 mb-0'),
                Column('owner_name', css_class='form-group col-md-4 mb-0'),
                Column('owner_ic',css_class='form-group col-md-4 mb-0'),
                Column('owner_phone', css_class='form-group col-md-4 mb-0'),
                css_class='form-row'
            ),
            FormActions(
                Submit('submit', 'Create'),
            )
        )

    class Meta:
        model = Car
        exclude = ['date'] 

Код в views.py.

Я добавил экземпляр в функцию редактирования, но есть ошибка для всех полей this field is required

def edit(request,id):
    car = Car.objects.get(id=id)
    form = CarForm(request.POST,instance=car)
    context = { 'car':car ,'form':form }
    return render(request,'cars/edit.html',context)

def update(request,id):
    car = Car.objects.get(id=id)
    car.reg_num = request.POST['reg_num']
    car.make = request.POST['make']
    car.color = request.POST['color']
    car.year = request.POST['year']
    car.engine_num = request.POST['engine_num']
    car.chasis_num = request.POST['chasis_num']
    car.note = request.POST['note']
    car.price_buy = request.POST['price_buy']
    car.price_sell = request.POST['price_sell']
    car.policy_num = request.POST['policy_num']
    car.owner_name = request.POST['owner_name']
    car.owner_ic = request.POST['owner_ic']
    car.owner_phone = request.POST['owner_phone']
    car.save()
    messages.success(request,'Car "%s" updated successfully' % car.reg_num)
    return redirect('/cars/list/')

Вот код для edit.html:


{% block title %}Edit Car Record{% endblock %}

{% load crispy_forms_tags %}

{% block content %}
<h1 align="center">Edit Car Record</h1>    
    {% crispy form %}
{% endblock %}
...