Ошибка проверки Django ModelChoiceField

Я пытался создать выбор входа из вариантов на основе модели. Я перепробовал несколько изменений, но ошибка сохраняется. Я надеюсь, что кто-то может помочь.

Код forms.py.

transaction_type = forms.ChoiceField(choices=TRANSACTION_TYPE_CHOICES, widget=forms.RadioSelect(), required=True)
transaction_purpose = forms.ChoiceField(choices=TRANSACTION_PURPOSE_CHOICES, widget=forms.RadioSelect(), required=True)
transaction_payment_method = forms.ChoiceField(choices=TRANSACTION_PAYMENT_METHOD_CHOICES, widget=forms.RadioSelect(), required=True)
transaction_currency = forms.ChoiceField(choices=TRANSACTION_CURRENCY, widget=forms.RadioSelect(attrs={'checked':'checked'}), required=True)
transaction_description = forms.CharField(widget=forms.Textarea(), required=False)
transaction_after_balance = forms.IntegerField(required=False)
transaction_account = forms.ModelChoiceField(required=False, queryset=Accounts.objects.none(), empty_label="Select Account")

class Meta:
    model = Transactions
    fields = ('transaction_amount','transaction_type', 'transaction_title',
    'transaction_description','transaction_currency','transaction_account',
    'transaction_purpose', 'transaction_payment_method','transaction_after_balance')

код views.py

def get(self, request):
    employee_name = Employees.objects.get(user=request.user)
    form = TransactionForm()
    form.fields['transaction_account'].queryset = Accounts.objects.filter(user=request.user)
    print(form.fields['transaction_account'].queryset)

    args = {}
    args['transaction_form'] = form
    args['employee_search'] = employee_name
    return render(request,'finance/add_transaction.html', args)

def post(self, request):
    transaction_form = TransactionForm(request.POST)
    transaction_balance = Transactions.objects.filter(user=request.user).latest('transaction_created_at').transaction_after_balance
    print (transaction_form)
    if transaction_form.is_valid():
        form_obj = transaction_form.save(commit=False)
        if form_obj.transaction_type == "Credit":
            transaction_balance = transaction_balance - form_obj.transaction_amount
            form_obj.transaction_after_balance = transaction_balance

        else:
            print (transaction_balance, form_obj.transaction_amount)
            transaction_balance = transaction_balance + form_obj.transaction_amount
            form_obj.transaction_after_balance = transaction_balance
        form_obj.user= request.user
        form_obj.save()
        return render(request,'dashboard')

    return render(request,'Error')

HTML шаблон кода

<div class="col-lg-3">
        <label>
          Account:
        </label>
        <div class="">
          {% render_field transaction_form.transaction_account class="form-control m-select2" id="account_select" name="transaction_account" %}
        </div>
      </div>

Шаблон отображается нормально. Это представленный шаблон, показывающий параметры.

Визуализированный HTML-код:

    <select name="transaction_account" id="account_select" class="form-control m-select2 select2-hidden-accessible" data-select2-id="account_select" tabindex="-1" aria-hidden="true">
  <option value="" selected="" data-select2-id="2">Select Account</option>
  <option value="1" data-select2-id="13">MCB</option>
</select>

Когда я отправляю форму. Форма не проверяется. Если удалить проверку и попытаться сохранить объект формы напрямую. Возникает исключение, что "1" должен быть экземпляром учетной записи.

Пожалуйста, помогите, так как я не могу понять, что я делаю здесь неправильно.

код models.py

class Transactions(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, blank=True, null=True)
    transaction_created_at = models.DateTimeField(auto_now_add='True')
    transaction_amount = models.IntegerField()
    transaction_title = models.CharField(max_length=150, blank=True, null=True)
    transaction_type= models.CharField(max_length=10)
    transaction_description= models.CharField(max_length=1000)
    transaction_after_balance= models.IntegerField(blank=True, null=True)
    transaction_currency=models.CharField(max_length=20)
    transaction_account=models.ForeignKey(Accounts, on_delete=models.CASCADE, blank=True, null=True)
    transaction_purpose=models.CharField(max_length=300)
    transaction_payment_method = models.CharField(max_length=20)

Я добавил код для файла models.py.

Обновить

Я вручную назначил объект на основе идентификатора из select в views.py. Другие ModelSelectFields работают нормально.

0 ответов

Другие вопросы по тегам