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

为什么我在Django中的表单除了一个字段外保存成功?,django,django-queryset,Django,Django Queryset,然后,forms.py中的我的表单被传递给my views.py中的这个方法,如果我进入python shell并从MyProfile打印对象,所有字段都会显示值,除了nearbyzips,它不显示任何值。正如您在下面看到的,我试图在保存表单时手动为nearbyzips赋值 内部视图.py @secure_required @login_required def profile_edit(request, username, edit_profile_form=EditProfileForm,

然后,forms.py中的我的表单被传递给my views.py中的这个方法,如果我进入python shell并从MyProfile打印对象,所有字段都会显示值,除了nearbyzips,它不显示任何值。正如您在下面看到的,我试图在保存表单时手动为nearbyzips赋值

内部视图.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
它打印出我所期望的所有邮政编码。所以我不确定到底哪里坏了。我在日志中没有看到任何错误

更新: 我在视图中添加了打印语句。打印邮政编码和表单。已清理的邮政编码数据['nearbyzips']均显示:

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

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

2件事在这里对我来说很突出

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

如果您的模型确实有一个名为
nearbyzips
的字段,请在表单类的内部
Meta
类中显式地包含它(以及所有要更新的字段)

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

更改此行:

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

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

由于您从未调用form.save,我无法想象如何保存任何字段。很抱歉,实际上包含了该字段,我一定没有粘贴它。我们可以查看您的模型吗?Zips附近是什么?它是什么字段类型?您正在传递一个列表,这似乎很奇怪。哦,这是一个整数字段,这就是为什么可能?它来自一个模型,是的,有一个nearbyzips字段。如果我填写并保存表单,进入python shell并打印该对象,我会看到包括nearbyzips在内的所有字段,但是nearbyzips=none我修复了这是一个打字错误,但是我已经更新了OP,因为它仍然不起作用。