如何编写保存具有外键的模型的视图

时间:2019-01-09 09:04:08

标签: django python-3.x

我是Django开发的新手,并且我有一个与ZipCode模型有关系的客户模型。因此,我要从客户模型中获取ZipCode模型中的zipCode。这样,ZipCode模型具有4个属性,例如pk(其为aut_increment),zipCode(其为唯一),城市和州。因此,我的问题是:如何在客户模型中获取zipCode属性作为外键,以及如何编写保存客户对象的视图?以下是客户和ZipCode模型:

class Customers(models.Model):
    customerID = models.CharField(max_length=15, unique=True)
    firstName = models.CharField(max_length=20)
    lastName = models.CharField(max_length=25)
    phoneNumber = models.CharField(max_length=14)
    zipCode = models.ForeignKey(ZipCode, on_delete=models.CASCADE)
    address = models.TextField()

class ZipCode(models.Model):
    zipCode = models.CharField(max_length=10, unique=True)
    city = models.CharField(max_length=30)
    state = models.CharField(max_length=25)
    def __str__(self):
        return self.zipCode + ' ' + self.city + ' ' + self.state

这里的视图add_customers也不起作用:

def add_Custmers(request):
    # try:
    #     zipCode=ZipCode.objects.get(slug=zipcode_slug)
    # except ZipCode.DoesNotExist:
    #     zipCode=None
    form=CustomersForm(request.POST or None)
    if form.is_valid():
        form.save()
    context = {'form': form}
    return render(request, 'customers.html', context

add customer form

我附上了添加客户表格以获取更多详细信息

class CustomersForm(forms.ModelForm):
    customerID = forms.CharField(max_length=15)
    firstName = forms.CharField(max_length=20)
    lastName = forms.CharField(max_length=25)
    phoneNumber = forms.CharField(max_length=14)
    zipCode = forms.ModelChoiceField(queryset=ZipCode.objects.all())
    address = forms.Textarea()
    class Meta:
        model=Customers
        fields=('customerID','firstName','lastName','phoneNumber', 'zipCode', 'address',)

以上是我定义的表格

1 个答案:

答案 0 :(得分:0)

执行以下操作,而不是在检查表单是否有效之后立即保存表单:

if form.is_valid():
    customer = form.save(commit=False)
    customer.zipCode = request.zipCode 
    form.save()

让我知道它是否仍然无法正常工作。

编辑:对不起,我们没有更早进行检查。应该是request.POST['zipCode']而不是request.zipCode