django配置文件和非类型用户
我被难住了 我正在构建一个表单,允许用户同时填写配置文件字段和用户字段。网上到处都有这样的例子,这个网站上也有一些例子(例如) 然而,尽管我可能会尝试,我还是在form.py中不断获得一个非类型用户 一些代码: forms.py url.pydjango配置文件和非类型用户,django,django-profiles,Django,Django Profiles,我被难住了 我正在构建一个表单,允许用户同时填写配置文件字段和用户字段。网上到处都有这样的例子,这个网站上也有一些例子(例如) 然而,尽管我可能会尝试,我还是在form.py中不断获得一个非类型用户 一些代码: forms.py url.py url(r'^profiles/edit/', 'profiles.views.edit_profile', {'form_class': ProfileForm}, name='edit_profile' ), template.html
url(r'^profiles/edit/', 'profiles.views.edit_profile', {'form_class': ProfileForm}, name='edit_profile' ),
template.html
<div class="clearfix">
<legend>Edit your profile details</legend>
</div>
{% include 'profiles/profile_form.html' with user=user %}
这是一个自定义后端引用,我已经确认它的工作
我希望有人有一些见解
编辑:
我的完全例外:
Exception Type: TemplateSyntaxError
Exception Value: Caught AttributeError while rendering: 'NoneType' object has no attribute 'first_name'
Exception Location:/Users/willcadell/placespeak/webapps/place/../place/accounts/forms.py in __init__, line 13
查看(来自django配置文件):
我还添加了两条注释,指出概要文件存在的位置和不存在的位置,即它在视图中作为profile_obj出现,但在表单中不作为self.instance出现
另一个(可能不相关)症状是,对于此异常页面,django工具栏不显示。。。奇怪 您可能并不总是有一个实例,这可能是它显示为无的原因。 尽力
def __init__(self, *args, **kwargs):
super(UserProfileForm, self).__init__(*args, **kwargs)
if kwargs.has_key('instance'):
instance = kwargs['instance']
self.initial['first_name'] = instance.first_name
self.initial['last_name'] = instance.last_name
另外,您使用的是用户
对象中的名字
,而用户配置文件
对象中的姓氏
!我只会始终如一。我正在使用下面的代码使它们在两个位置都可用
# first_name - stores in auth.User
def _get_first_name(self):
return self.user.first_name
def _set_first_name(self, name):
self.user.first_name = name
first_name = property(_get_first_name, _set_first_name)
# last_name - stores in auth.User
def _get_last_name(self):
return self.user.last_name
def _set_last_name(self, name):
self.user.last_name = name
last_name = property(_get_last_name, _set_last_name)
您可能并不总是有一个实例,这可能是它显示为无的原因。 尽力
def __init__(self, *args, **kwargs):
super(UserProfileForm, self).__init__(*args, **kwargs)
if kwargs.has_key('instance'):
instance = kwargs['instance']
self.initial['first_name'] = instance.first_name
self.initial['last_name'] = instance.last_name
另外,您使用的是用户
对象中的名字
,而用户配置文件
对象中的姓氏
!我只会始终如一。我正在使用下面的代码使它们在两个位置都可用
# first_name - stores in auth.User
def _get_first_name(self):
return self.user.first_name
def _set_first_name(self, name):
self.user.first_name = name
first_name = property(_get_first_name, _set_first_name)
# last_name - stores in auth.User
def _get_last_name(self):
return self.user.last_name
def _set_last_name(self, name):
self.user.last_name = name
last_name = property(_get_last_name, _set_last_name)
这就是我最后做的: view.py:
def edit_profile(request):
profile_obj = request.user.get_profile()
print dir(profile_obj.profileasset_set)
asset_obj = profile_obj.
user_obj = request.user
if request.method == 'POST':
form = ProfileForm(request.POST, )
if form.is_valid():
profile_obj.twitter = form.cleaned_data['twitter']
profile_obj.about = form.cleaned_data['about']
profile_obj.url = form.cleaned_data['url']
profile_obj.save()
profile
user_obj.first_name = form.cleaned_data['first_name']
user_obj.last_name = form.cleaned_data['last_name']
user_obj.save()
form.save()
return HttpResponseRedirect('/profiles/profile')
else:
form = ProfileForm(instance=user_obj,
initial={
'first_name':user_obj.first_name,
'last_name':user_obj.last_name,
'twitter':profile_obj.twitter,
'url':profile_obj.url,
'about':profile_obj.about,
}
)
template = 'profiles/edit_profile.html'
data = {'form': form, }
return render_to_response(template, data, context_instance=RequestContext(request))
forms.py:
class ProfileForm(ModelForm):
first_name = forms.CharField(label="First name")
last_name = forms.CharField(label="Last name")
twitter = forms.CharField(label="Twitter")
about = forms.CharField(label="About", widget=forms.Textarea)
url = forms.CharField(label="URL")
class Meta:
model = UserProfile
fields = ('url', 'twitter', 'about')
希望这对别人有帮助 这就是我最后要做的: view.py:
def edit_profile(request):
profile_obj = request.user.get_profile()
print dir(profile_obj.profileasset_set)
asset_obj = profile_obj.
user_obj = request.user
if request.method == 'POST':
form = ProfileForm(request.POST, )
if form.is_valid():
profile_obj.twitter = form.cleaned_data['twitter']
profile_obj.about = form.cleaned_data['about']
profile_obj.url = form.cleaned_data['url']
profile_obj.save()
profile
user_obj.first_name = form.cleaned_data['first_name']
user_obj.last_name = form.cleaned_data['last_name']
user_obj.save()
form.save()
return HttpResponseRedirect('/profiles/profile')
else:
form = ProfileForm(instance=user_obj,
initial={
'first_name':user_obj.first_name,
'last_name':user_obj.last_name,
'twitter':profile_obj.twitter,
'url':profile_obj.url,
'about':profile_obj.about,
}
)
template = 'profiles/edit_profile.html'
data = {'form': form, }
return render_to_response(template, data, context_instance=RequestContext(request))
forms.py:
class ProfileForm(ModelForm):
first_name = forms.CharField(label="First name")
last_name = forms.CharField(label="Last name")
twitter = forms.CharField(label="Twitter")
about = forms.CharField(label="About", widget=forms.Textarea)
url = forms.CharField(label="URL")
class Meta:
model = UserProfile
fields = ('url', 'twitter', 'about')
希望这对别人有帮助 你可以发布你的观点和异常的完整回溯吗?如果你已经这样做了,谢谢你的帮助!你有那个用户的profile对象吗?是的,当我在视图中打印profile对象,然后我得到self.instance:qgzgetyvforbiehmaqwcohypuypxc的profile和None的profile这个长随机字符串,因为我正在使用电子邮件进行登录,并且使用随机的sting作为伪用户名。您可以发布您的视图并对异常进行完整的跟踪吗?已经完成了,谢谢您的帮助!你有那个用户的配置文件对象吗?是的,当我在视图中打印配置文件对象,然后是self.instance时,我得到:qgzgetyvforbiehmaqwcohypuypxc的配置文件和None的配置文件一个大的长随机字符串,因为我使用email进行logi,并使用随机sting作为伪用户名谢谢Meitham!事实上,我最终完全改写了这个观点。因此,解决了我关于名字和姓氏的愚蠢错误(很棒的地方!),我也在视图中设置了初始数据值。Meitham,如果我有这个名声,我会给你一个+1:(谢谢Meitham!我实际上完全重写了视图。从而解决了我关于名字和姓氏的愚蠢错误(很棒的地方!)我也在视图中设置了初始数据值。Meitham,如果我有声誉,我会给你一个+1:(