Django ';用户配置文件';对象没有属性';id';

Django ';用户配置文件';对象没有属性';id';,django,django-models,django-views,Django,Django Models,Django Views,我有一个更新表单,当我按下更新按钮更新表单以更新用户配置文件时,如果我得到错误“'UserProfile'对象没有属性'id'” 我的模型是: from django.db import models from django.db.models.signals import post_save from django.dispatch import receiver class UserProfile(models.Model): user = models.OneToOneField(

我有一个更新表单,当我按下更新按钮更新表单以更新用户配置文件时,如果我得到错误“'UserProfile'对象没有属性'id'”

我的模型是:

from django.db import models
from django.db.models.signals import post_save
from django.dispatch import receiver

class UserProfile(models.Model):
   user = models.OneToOneField(User, related_name="custom_user_profile", primary_key=True)

   organization = models.CharField(max_length=100, default='', blank=True) 
   address_line_1 = models.CharField(max_length=100, default='', blank=True)
   address_line_2 = models.CharField(max_length=100, default='', blank=True)
   city = models.CharField(max_length=100, default='', blank=True)
   state = models.CharField(max_length=100, default='', blank=True)
   post_code = models.CharField(max_length=100, default='', blank=True)
   country = models.CharField(max_length=100, default='', blank=True)

def __unicode__(self):
    return self.user.username


@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
    if created:
        profile, new = UserProfile.objects.get_or_create(user=instance)
我的看法是:

from django.shortcuts import render_to_response
from django.shortcuts import HttpResponseRedirect
from django.template import RequestContext
from django.core.context_processors import csrf
from django.contrib.auth.decorators import login_required
from user_profile.models import UserProfile
from django.contrib.auth.models import User
from forms import UserProfileForm
from django.shortcuts import redirect

@login_required 
def update_profile(request):
    userProfile = UserProfile.objects.get(user=request.user)

    form = UserProfileForm(initial={

        'organization':userProfile.organization,
        'address_line_1':userProfile.address_line_1,
        'address_line_2':userProfile.address_line_2,
        'city':userProfile.city,
        'state':userProfile.state,
        'post_code':userProfile.post_code,
        'country':userProfile.country,
      })
    return render_to_response('user_profile/update_profile.html', {'form':form}, RequestContext(request))


@login_required 
def profile(request, profile_id):
    if profile_id == "0":
        if request.user.is_authenticated:
            userProfile = UserProfile.objects.get(user=request.user)

    else:
        userProfile = UserProfile.objects.get(pk=profile_id)

    return render_to_response('user_profile/profile.html', {'userProfile':userProfile}, RequestContext(request))


@login_required 
def send_update_profile(request):
    if request.method == 'POST':
        form = UserProfileForm(request.POST)
        if form.is_valid():
            userProfile = UserProfile.objects.get(user=request.user)


            organization = form.cleaned_data['organization']
            userProfile.organization = organization

            address_line_1 = form.cleaned_data['address_line_1']
            userProfile.address_line_1 = address_line_1

            address_line_2 = form.cleaned_data['address_line_2']
            userProfile.address_line_2 = address_line_2

            city = form.cleaned_data['city']
            userProfile.city = city

            state = form.cleaned_data['state']
            userProfile.state = state

            post_code = form.cleaned_data['post_code']
            userProfile.post_code = post_code

            country = form.cleaned_data['country']
            userProfile.country = country

            userProfile.save()
            return redirect('/user/profile/' + str(userProfile.id))

        else:
            form = UserProfileForm()

        return redirect('/user/send_update_profile/')
我不明白为什么。一件事是,在admin.py中,如果我尝试添加'id'作为列表显示。出现一个错误,说明我正在创建的用户配置文件中没有id。不过,我认为在创建模型时会自动创建id字段


有什么建议吗?

Django为每个模型提供一个命名的
id
,除非您自己指定主键。在您的情况下,您的模型没有
id
字段,因为您已将
user
设置为主键

class UserProfile(models.Model):
    user = models.OneToOneField(User, related_name="custom_user_profile", primary_key=True)
return redirect('/user/profile/' + str(userProfile.pk))
您可以将代码更改为使用
userProfile.user\u id
。另一个选项是使用访问主键

class UserProfile(models.Model):
    user = models.OneToOneField(User, related_name="custom_user_profile", primary_key=True)
return redirect('/user/profile/' + str(userProfile.pk))

Django为每个模型提供一个名为
的id
,除非您自己指定主键。在您的情况下,您的模型没有
id
字段,因为您已将
user
设置为主键

class UserProfile(models.Model):
    user = models.OneToOneField(User, related_name="custom_user_profile", primary_key=True)
return redirect('/user/profile/' + str(userProfile.pk))
您可以将代码更改为使用
userProfile.user\u id
。另一个选项是使用访问主键

class UserProfile(models.Model):
    user = models.OneToOneField(User, related_name="custom_user_profile", primary_key=True)
return redirect('/user/profile/' + str(userProfile.pk))

通常会有,但您已经通过将user定义为主键来专门覆盖它。通常会有,但您已经通过将user定义为主键来专门覆盖它。