Невозможно присвоить "'": "" должен быть "" экземпляром. ModelChoiceField

У меня есть форма, где пользователь может выбрать название объекта и затем сохранить его, но когда я нажимаю сохранить, я получаю ошибку. Я очень уверен, что эта проблема связана с тем, что я использую ModelChoiceField, который возвращает ids объектов, а не экземпляры этого объекта.

Итак, у меня есть две модели: InvoiceModel

class Invoice(models.Model):
  line_one = models.ForeignKey(Inventory, on_delete=models.CASCADE, related_name='+', verbose_name="Line 1", blank=True, null=True, default='')
  line_one_quantity = models.IntegerField('Quantity', default=0, blank=True, null=True)
  line_one_unit_price = models.IntegerField('Unit Price(₹)', default=0, blank=True, null=True)
  line_one_total_price = models.IntegerField('Line Total(₹)', default=0, blank=True, null=True)

Invoice.line_one ссылается на Inventory.product_number.


InventoryModel:

class Inventory(models.Model):
  product_number = models.IntegerField(primary_key=True)
  product = models.TextField(max_length=3000, default='', blank=True, null=True)
  title = models.CharField('Title', max_length=120, default='', blank=True, null=True, unique=True)
  amount = models.IntegerField('Unit Price', default=0, blank=True, null=True)

  def __str__(self):
    return self.title

InvoiceForm:

class InvoiceForm(forms.ModelForm):
  line_one = forms.ModelChoiceField(queryset=Inventory.objects.values_list('title', flat=True), label="Line 1")
  line_one_unit_price = forms.CharField(widget=forms.Select, label="Unit Price(₹)")
  class Meta:
    model = Invoice
    fields = ['line_one',#...]

  def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.fields['line_one_unit_price'].widget.choices = [(i.amount, i.amount) for i in Inventory.objects.all()]

На самом деле у меня 10 строк, [т.е. line_two и т.д.], но я просто вставляю код для первой строки здесь для простоты.

Я также хочу, чтобы в line_one отображался только объем объекта, выбранного в line_one_unit_price. Пожалуйста, дайте мне знать, если вы знаете, как этого добиться.

views.py:

@login_required
def add_invoice(request):
  form = InvoiceForm(request.POST or None)
  total_invoices = Invoice.objects.count()
  queryset = Invoice.objects.order_by('-invoice_date')[:6]

  if form.is_valid():
    form.save()
    messages.success(request, 'Successfully Saved')
    return redirect('/invoice/list_invoice')
  context = {
    "form": form,
    "title": "New Invoice",
    "total_invoices": total_invoices,
    "queryset": queryset,
}
return render(request, "entry.html", context)

Ошибка, которую я получаю:

enter image description here

Спасибо!

В атрибуте queryset внутри ModelChoiceField следует передать pk вместе с атрибутом, который вы хотите отобразить. Например:

forms.ModelChoiceField(queryset=Inventory.objects.values('pk','title'), label="Line 1")
Вернуться на верх