首页 > 解决方案 > Django Form 和两个带外键的表单

问题描述

我有这些模型:

class Customers(models.Model):
    ID = models.AutoField(primary_key=True)
    ...

    def __str__(self):
        return str(self.ID)

class CustomerAddresses(models.Model):
    ID = models.AutoField(primary_key=True)
    ...
    CustomerNoID = models.ForeignKey('Customers', on_delete=models.CASCADE)

    def __str__(self):
        return str(self.ID)

和我的观点:

def add_customer_view(request):
    user_id = request.user.id
    last_customerno = Customers.objects.filter(UserID=user_id).order_by('CustomerNo').last()
    if not last_customerno:
        # return '0001'
        last_customerno = 1000
    if last_customerno == 1000:
        customerno_int = 1000
    else:
        customerno_int = last_customerno.CustomerNo + 1
    # if this is a POST request we need to process the form data
    if request.method == 'POST':
        customer_form = CustomerForm(request.user.id, request.POST)
        customer_address_form = CustomerAddressesForm(request.user.id, request.POST)
        if customer_form.is_valid():
            new_customer = customer_form.save(commit=False)
            new_customer.save()
            if customer_address_form.is_valid():
                new_address = customer_address_form.save(commit=False)
                new_address.CustomerNoID = new_customer
                new_address.save()
                return HttpResponseRedirect('/backend/kunder/')
    else:
        customer_form = CustomerForm(request.user.id, initial={'CustomerNo': customerno_int})
        customer_address_form = CustomerAddressesForm(request.user.id)
    return render(
        request,
        'backend/add_customer.html',
        {
            'title': 'WestcoastShop - Backend',
            'customer_form': customer_form,
            'customer_address_form': customer_address_form
        }
    )

但只是客户创建的不是地址,我认为表单缺少 CustomerNoID,我认为我得到了正确的方法,但 6 小时后我放弃了,也许这是一个聪明的人如何发现错误。

问候。

标签: djangodjango-modelsdjango-forms

解决方案


我更改了表单并在模态中添加了第二个,因此我可以保存两个不相关的模型。


推荐阅读