Python Django:将用户配置文件与应用程序模型关联

Python Django:将用户配置文件与应用程序模型关联,python,django,Python,Django,myimages应用程序: models.py: class Image(models.Model): owner = models.ForeignKey(UserProfile, on_delete=models.CASCADE) title = models.CharField(max_length=100) photo = models.FileField() class UserProfile(models.Model): user = models

myimages应用程序:

models.py:

class Image(models.Model):
    owner = models.ForeignKey(UserProfile, on_delete=models.CASCADE)
    title = models.CharField(max_length=100)
    photo = models.FileField()
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
URL.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 Image(models.Model):
    owner = models.ForeignKey(UserProfile, on_delete=models.CASCADE)
    title = models.CharField(max_length=100)
    photo = models.FileField()
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”对象没有属性“userprofile”

您可以通过覆盖
表单\u 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)

相关部分。

谢谢您的回复!!!!但是,上载图像时出错:
无法分配“”:“image.owner”必须是“UserProfile”实例。
@JoseYu这是因为
请求。user
不是UserProfile实例。尝试更改为:
form.instance.owner=self.request.user.userprofile
。如果这没有帮助添加到问题
UserProfile
model。它仍然不起作用,错误消息:“User”对象没有属性“UserProfile”,我已上载UserProfilemodel@JoseYu您为UserProfile设置了
related\u name=profile
,因此,您需要使用它来获取用户的配置文件
form.instance.owner=self.request.user.profile
@ycsjose这意味着当前用户没有配置文件。尝试添加profille frod管理页面。