为什么我在Django中的表单除了一个字段外保存成功?
然后,forms.py中的我的表单被传递给my views.py中的这个方法,如果我进入python shell并从MyProfile打印对象,所有字段都会显示值,除了nearbyzips,它不显示任何值。正如您在下面看到的,我试图在保存表单时手动为nearbyzips赋值 内部视图.py为什么我在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,
@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,因为它仍然不起作用。