我收到"列user_id不是唯一的"在我的Django应用程序中

时间:2016-03-18 07:46:55

标签: python django django-models django-views

我的用户首先使用用户名,电子邮件和密码注册,然后创建个人资料。

在个人资料中,他们输入名字和姓氏(Django用户模型),然后按照此模型输入城市和个人资料照片:

# this is model for user profile
class UserProfile(models.Model):
    user = models.OneToOneField(User, related_name='profile')

    hobbies = models.ManyToManyField(Hobby)
    languages = models.ManyToManyField(Language)

    profilepic = models.ImageField(upload_to='profile_images', blank=True)
    city = models.ForeignKey(City)
    slug = models.SlugField(unique=True)

    average_rating = models.IntegerField(default=0)
    ratings_count = models.IntegerField(default=0)

    def save(self, *args, **kwargs):
        # Uncomment if you don't want the slug to change every time the name changes
        self.slug = slugify(self.user.username)
        super(UserProfile, self).save(*args, **kwargs)

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

    def update_average_rating(self, new_rating, *args, **kwargs):

        old_total = self.average_rating * self.ratings_count

        self.ratings_count += 1

        # Find new average
        self.average_rating = (old_total + new_rating) / self.ratings_count
        print self.user.first_name + str(self.average_rating)
        super(UserProfile, self).save(*args, **kwargs)

    def get_range_average(self):
        print self.average_rating
        return range(self.average_rating)

这是我的观点:

def createprofile(request):

    registered = False
    if request.method == 'POST':
        user = User.objects.get(username = request.user.username)
        user_form = UserForm(data=request.POST, instance = user)

        profile_form = UserProfileForm(data=request.POST)

        if user_form.is_valid() and profile_form.is_valid():
            user = user_form.save()
            user.save()

            profile = profile_form.save(commit=False)
            profile.user = request.user



            if 'profilepic' in request.FILES:
                profile.profilepic = request.FILES['profilepic']

            profile.save()

            registered = True

        else:
            print user_form.errors, profile_form.errors

    else:
        user_form = UserForm()
        profile_form = UserProfileForm()

    return render(request,
            'createprofile.html',
            {'user_form': user_form, 'profile_form': profile_form, 'registered': registered} )

但它抱怨这句话:profile.save()说:

> IntegrityError at /createprofile/ column user_id is not unique Request
> Method:   POST Request URL:   http://localhost:8000/createprofile/ Django
> Version:  1.7 Exception Type: IntegrityError Exception Value:  column
> user_id is not unique Exception
> Location: C:\Python27\Lib\site-packages\django\db\backends\sqlite3\base.py
> in execute, line 485 Python Executable:   C:\python27\python.exe Python
> Version:  2.7.11 Python Path:  ['C:\\Users\\bnbih\\excurj', 
> 'C:\\Python27\\Lib\\site-packages\\setuptools-19.4-py2.7.egg', 
> 'C:\\python27\\lib\\site-packages\\setuptools-19.4-py2.7.egg', 
> 'C:\\Python27\\Lib\\site-packages', 
> 'C:\\WINDOWS\\SYSTEM32\\python27.zip',  'C:\\python27\\DLLs', 
> 'C:\\python27\\lib',  'C:\\python27\\lib\\plat-win', 
> 'C:\\python27\\lib\\lib-tk',  'C:\\python27'] Server time:    Fri, 18 Mar
> 2016 07:38:34 +0000

但是刚刚创建了User对象,并且没有与之关联的其他UserProfiles。那为什么呢?

此外,这些是我的表格:

class UserForm(forms.ModelForm):


        class Meta:
            model = User
            fields =  ('first_name', 'last_name')

class UserProfileForm(forms.ModelForm):
        class Meta:
            model = UserProfile
            fields = ('profilepic', 'city')

0 个答案:

没有答案