Значение Ошибка при отправке формы в django - PullRequest
0 голосов
/ 11 ноября 2019

Когда я пытаюсь сохранить форму, нажимая кнопку, появляется ошибка значения метода POST в продукте. Вот код представления, я думаю, что это на product = Product.objects.get (id = product_id), я пробовал другие переменные, но он не работает

class LoanApplicationCreateView(AtomicMixin, TemplateView):
template_name = 'products/create_loan_application.html'
model = LoanApplication
form_class = LoanApplicationCreateForm

def get_object(self, queryset=None):
    """Get loan application request object."""
    return self.model.objects.get(id=self.kwargs.get('id'))

def get_context_data(self, business_id, **kwargs):
    """Get new loan application form view."""
    context = super().get_context_data(**kwargs)
    context = dict()
    context = super(LoanApplicationCreateView, self).get_context_data(**kwargs)
    context['page_name'] = 'new loan application'
    context['title'] = 'Add Loan Application'
    borrower_business = get_object_or_404(Business, pk=business_id)
    context['borrower_business_id'] = borrower_business.id
    context['borrower_business_name'] = borrower_business.business_name
    data = {'borrower_business': borrower_business}
    context['loan_application_form'] = LoanApplicationCreateForm(data=data)
    products = Product.objects.all().values_list('id', 'product_type')
    product_name = Product.objects.all().values_list('product_name')
    context['product_list'] = json.dumps(list(products), cls=DjangoJSONEncoder)

    return context

def post(self, request, business_id):

    loan_application_form = LoanApplicationCreateForm(data=request.POST)

    product_id = request.POST.get('product')
    product = Product.objects.get(id=product_id)
    if loan_application_form.is_valid():
        loan_application_form.save()
    else:
        errors = ''
        for _, error in loan_application_form.errors.items():
            errors = '{} {}'.format(errors, error)
        messages.error(
            request, 'Unable to create the Loan Application. {}'.format(errors), extra_tags='alert alert-danger'
        )
        return HttpResponseRedirect(self.request.META.get('HTTP_REFERER'))

Я получаю эту ошибку. ..

ValueError at /products/customer/add_loan_application/414c7d8f-c6e0-4121-940c-8e6dd6a321ec/

Cannot assign "'b724ec73-1e24-440b-a960-2c9972a40839'": "LoanApplication.product" must be a "Product" instance.

1 Ответ

0 голосов
/ 11 ноября 2019
product = Product.objects.get(id=product_id) # get the product model object
if loan_application_form.is_valid():
    loan_application_form.save(commit=False)
    loan_application_form.product = product # assign the product instance to product column
    loan_application_form.save() # save the form`enter code here`


or the other way is to save the instance in your form by passing the instance to your form save method

views.py

product = Product.objects.get(id=product_id) # get the product model object
if loan_application_form.is_valid():
    loan_application_form.save(product)


forms.py

In your LoanApplicationCreateForm class, need to write the save method

        def save(self, product, commit=True):
            instance = super(LoanApplicationCreateForm, self).save(commit=False)

            if not self.instance.pk:
                # create
                if commit:
                    instance.product = product
                    instance.save()
            return instance
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...