django配置文件和非类型用户

django配置文件和非类型用户,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

我被难住了

我正在构建一个表单,允许用户同时填写配置文件字段和用户字段。网上到处都有这样的例子,这个网站上也有一些例子(例如)

然而,尽管我可能会尝试,我还是在form.py中不断获得一个非类型用户

一些代码: forms.py

url.py

    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:(