除了一个字段外,为什么Django中的表单保存成功?

时间:2015-02-16 20:07:13

标签: django django-queryset

然后我在views.py中将form.py中的表单传递给此方法,如果我进入python shell并从MyProfile中打印对象,则所有字段都会显示除exceptzips之外的值,其中显示None。如下所示,我正在尝试在保存表单时手动为nearzips分配值。

在views.py

@secure_required
@login_required
def profile_edit(request, username, edit_profile_form=EditProfileForm,
                 template_name='userena/profile_form.html', success_url=None,
                 extra_context=None, **kwargs):
profile = get_profile(user)
form = edit_profile_form(instance=profile, initial=user_initial)
    if request.method == 'POST':
        if form.is_valid()
            cleanzipcode = form.cleaned_data['zipcode']

            nearestzips = PostalCode.objects.distance(PostalCode.objects.get(code=cleanzipcode).location)
            zip_codes = list(nearestzips.values_list('code', flat=True))
            //print zip_codes
            form.cleaned_data['nearbyzips'] = zip_codes
            //print form.cleaned_data['nearbyzips']

            profile=form.save()

            return redirect(redirect_to)

models.py

class MyProfile(UserenaBaseProfile):
    user = models.OneToOneField(User,
                                unique=True,
                                verbose_name=_('user'),
                                related_name='my_profile')
    streetaddress=models.CharField(null=True, blank=True, max_length=30)
    city = models.CharField(null=True, blank=True, max_length=20)
    state = models.CharField(null=True, blank=True, max_length=20)
    zipcode = models.IntegerField(_('zipcode'),
                                       max_length=5, null=True, blank=True)
    nearbyzips = models.IntegerField(null=True, blank=True, max_length=100)
    phone=models.CharField(null=True, blank=True, max_length=16)
    websiteurl=models.CharField(null=True, blank=True, max_length=38)

要记住一些事情,如果我进入python shell并运行:

nearestzips = PostalCode.objects.distance(PostalCode.objects.get(code='97202').location
print nearestzips

它会打印我期望的所有邮政编码。所以我不知道到底哪里坏了。我的日志中没有发现任何错误。

更新: 我在视图中添加了print语句。打印zip_codes和form.cleaned_data [' nearbyzips']都显示:

[u'97202', u'97206', u'97214', u'97215', u'97239']

但它似乎仍然没有保存到表单中。

2 个答案:

答案 0 :(得分:0)

这里有两件事让我感到高兴。

您的表单是为某种配置文件模型创建的(get_profile_model()) - 此配置文件模型是否有一个名为nearbyzips的字段?

如果您的模型确实有一个名为nearbyzips的字段,请在表单类的内部Meta类中的tuple/list of fields中明确包含它(以及您要更新的所有字段)。< / p>

另外,我没有看到您在视图函数中调用表单类的save方法(即form.save())。

答案 1 :(得分:0)

更改此行:

 tzips = PostalCode.objects.distance(PostalCode.objects.get(code='cleanzipcode').location)

到此:

tzips = PostalCode.objects.distance(PostalCode.objects.get(code=cleanzipcode).location)