myimages app:
models.py:
class Image(models.Model):
owner = models.ForeignKey(UserProfile, on_delete=models.CASCADE)
title = models.CharField(max_length=100)
photo = models.FileField()
urls.py:
url(r'image/add/$', views.ImageCreate.as_view(), name='image-add'),
views.py:
class ImageCreate (CreateView):
model = Image
fields = ['title', 'photo']
def form_valid(self, form):
form.instance.owner = self.request.user.userprofile
return super().form_valid(form)
的UserProfiles / models.py:
class UserProfile(models.Model):
user = models.OneToOneField(User, null=True, related_name="profile", verbose_name=_(u'User'), on_delete=models.DO_NOTHING,)
phone = models.PositiveIntegerField(null=True, blank=True)
gender = models.CharField(max_length=40, blank=True, verbose_name=_(u'Gender'), choices=GENDER)
avatar = models.ImageField(upload_to='userprofiles/avatars', null=True, blank=True, verbose_name=_(u"Avatar"))
completion_level = models.PositiveSmallIntegerField(default=0, verbose_name=_(u'Profile completion percentage'))
email_is_verified = models.BooleanField(default=False, verbose_name=_(u'Email is verified'))
personal_info_is_completed = models.BooleanField(default=False, verbose_name=_(u'Personal info completed'))
class Meta:
verbose_name=_(u'User profile')
verbose_name_plural = _(u'User profiles')
def __unicode__(self):
return u"User profile: %s" % self.user.username
def get_completion_level(self):
completion_level = 0
if self.email_is_verified:
completion_level += 50
if self.personal_info_is_completed:
completion_level += 50
return completion_level
def update_completion_level(self):
self.completion_level = self.get_completion_level()
self.save()
return
我正在创建一个网站供人们在Django上传图片
应该添加到代码中以便当页面用户使用以下通用视图函数上传图像时,数据库可以保存所有者并将用户作为所有者与图像模型相关联这里:models.ForeignKey(UserProfile, on_delete=models.CASCADE)
错误消息:
'User' object has no attribute 'userprofile'
答案 0 :(得分:0)
您可以通过覆盖form_valid
方法来实现此功能。要让当前用户使用self.request.user
:
class ImageCreate (CreateView):
model = Image
fields = ['title', 'photo']
def form_valid(self, form):
form.instance.owner = self.request.user.userprofile
return super().form_valid(form)
docs的相关部分。