Создание одного объекта для нескольких моделей в одной форме

Это проект поддержки вендора. У меня есть три модели,

  1. Item
  2. DeliveryOrderForm
  3. TableList

Item определяет, какие товары продает продавец. DeliveryOrderForm сохраняет данные получателя/покупателя. TableList сохраняет информацию о каждой строке заказа, которую заказывает покупатель.

models.py

class Item(models.Model):
    itemID = models.AutoField(unique=True,primary_key=True)
    itemPrice = models.DecimalField(default=0,max_digits=19,decimal_places=2)
    itemDescription = models.CharField(max_length=30)

#deliveryorder status
class Status(models.IntegerChoices):
    pending = 1
    disapproved = 2
    approved = 3

class DeliveryOrderForm(models.Model):
    deliveryOrderID = models.AutoField(unique=True,primary_key=True)
    vendorName = models.CharField(max_length=30)
    vendorAddress = models.CharField(max_length=200)
    recipientName = models.CharField(max_length=30)
    recipientPhone = PhoneNumberField(blank=False)
    recipientAddress = models.CharField(max_length=200)
    deliveryOrderStatus = models.IntegerField(default=Status.pending,choices=Status.choices)
    deliveryOrderDate = models.DateTimeField(default=timezone.now)

class TableList(models.Model):
    deliveryOrderID = models.ForeignKey(DeliveryOrderForm,on_delete = models.CASCADE)
    itemID = models.ForeignKey(Item,on_delete=models.PROTECT)
    itemQuantity = models.IntegerField(default=0)

Итак, на странице администратора создание объекта DeliveryOrderForm проходит нормально. Я также смог отобразить DeliveryOrderForm вместе с TableList.

Сейчас проблема заключается в попытке создать представление, которое работает для создания объекта DeliveryOrderForm.

Я пробовал это :

forms.py

class DOForm(ModelForm):
class Meta:
    model = DeliveryOrderForm
    fields = '__all__'

views.py

def createDeliveryOrder(request):
    model = DeliveryOrderForm
    template_name = 'deliveryorder/create.html'
    deliveryOrderID = get_object_or_404(
        model.objects.order_by('-deliveryOrderID')[:1]
    )

    formset = inlineformset_factory(DeliveryOrderForm,TableList, fields = [
    'itemID',
    'itemQuantity',
    ])


    if request.method == 'POST':
        form = DOForm(request.POST,prefix = 'deliveryorder')
        if form.is_valid() and formset.has_changed():
            form.save()
            for form in formset:
                formset.save()
            return reverse_lazy('deliveryorder:index')
    else: 
        if request.method == 'GET':
            form = DOForm()

    context = {
        'deliveryOrderID':deliveryOrderID,
        'form':form,
        'formset':formset
    }
    return render(request,template_name,context)

Этот код, конечно, может отобразить соответствующие поля, но нажатие кнопки submit не сохраняет их данные в базе данных. Мне кажется, что проблема кроется в части сохранения формы, но я не совсем уверен, что это можно исправить.

Вернуться на верх