如何使用python Django中的OnetoOneField()将配置文件图像单独上载到用户_auth?

2024-09-30 12:16:35 发布

您现在位置:Python中文网/ 问答频道 /正文

CAMROID
|--accounts_app
|    |--admin.py
|    |--models.py
|    |--urls.py
|    |--views.py
|
|--camroid_app
|    |--admin.py
|    |--models.py
|    |--urls.py
|    |--views.py
|
|--camroid_project
|    |--settings.py
|    |--urls.py
|
|--media
|    |--ProfileImg
|
|--static
|    |--css
|    |--js
|    |--fonts
|    |--images
|
|--templates
     |--base.html
     |--category.html
     |--index.html
     |--myspace.html
     |--register.html

我有一个注册表单,用户可以在其中注册,他的详细信息被上传到user_auth表,此外还有另一个模型UserProfile,其中包含profile_img = Imagefield()user_auth表有OnetoOneField关系,用户只有在登录时才能上传他的个人资料图像。因此,用户注册时不上传图像,只能从myspace.html上传个人资料图像

accounts_app处理所有与帐户相关的功能,如注册和登录以及 camroid_app处理站点的实际内容[index.html,myspace.html]

here is myspace.html page. As you can see i'm using two seperate form one for uploading profile pic and another for updating details of user

更新详细信息的表单将是一项简单的任务,但在使用OnetoOneField时上传个人资料pic是我需要帮助的地方。因为我不知道它是怎么工作的。我已经介绍了大多数解决方案,但在所有示例中,用户都是在创建用户时从django admin应用程序上载图像的。但我有一个不同的senario,我希望用户上传图像从主应用程序,而不是从django管理应用程序,加上图像只能上传时,用户已经创建

models.py


class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    profile_img = models.ImageField(upload_to='ProfileImg')

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

views.py

        request.POST['action'] == 'save-upload':

            if request.FILES['profile-upload'] != None:
                userprofilemodel = apps.get_model('accounts_app', 'UserProfile')

                profile_img = request.FILES['profile-upload']

              /// your suggested code


Tags: 用户py图像appadminmodelshtmlprofile
1条回答
网友
1楼 · 发布于 2024-09-30 12:16:35

您必须像这样在onetoonefield中输入相关名称,然后您可以像这样获得userprofile图像url

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')
    profile_img = models.ImageField(upload_to='ProfileImg')

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

之后就这样使用

user_object.profile.profile_img

如果你不想写相关的名字,你可以这样用

user_object.user.profile_img

我不确定第二种方法,但第一种方法会运行

相关问题 更多 >

    热门问题