我的用户首先使用用户名,电子邮件和密码注册,然后创建个人资料。
在个人资料中,他们输入名字和姓氏(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')