然后我在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']
但它似乎仍然没有保存到表单中。
答案 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)