代码之家  ›  专栏  ›  技术社区  ›  Mohamed Abdillah

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

  •  0
  • Mohamed Abdillah  · 技术社区  · 6 年前

    我刚开始在Django开发,我有一个与ZipCode模型有关系的模型客户。所以从模型客户那里,我想得到zipcode模型中的zipcode。这样,zipcode模型有4个属性,如pk(aut_增量)、zipcode(唯一)、city(城市)和state(州)。因此,我的问题是:如何在客户模型中获取作为外键的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
    

    这里的视图还添加了不起作用的客户:

    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 回复  |  直到 6 年前
        1
  •  0
  •   Sulove Bista    6 年前

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

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

    如果它仍然不工作,请告诉我。

    编辑:抱歉之前没有检查过。应该是 request.POST['zipCode'] 而不是 request.zipCode