django:使用一对一扩展用户模型:如何保存()配置文件模型的字段

2024-02-16

我有一个基本的 Django 应用程序,其中除了用户模型之外,我还使用扩展了配置文件模型一对一字段.

模型.py

class Profile(models.Model):
  user = models.OneToOneField(User, on_delete=models.CASCADE,  null=True)
  profile_picture = models.ImageField(upload_to='customer_profile_images/%Y/%m/%d/', null=True, blank=True, verbose_name="Profile Picture")
  phone_number = models.CharField(null=True, blank=True, max_length=10)

  # no need for following two methods
  # def create_user_profile(sender, instance, created, **kwargs):
    # if created:
        # Profile.objects.get_or_create(user=instance)

  # post_save.connect(create_user_profile, sender=User)

  def __str__(self):
     return f'{self.user.first_name} {self.user.last_name}'

In admin.py我已经注册了 Profile 模型,如下所示:

from myapp import Profile


class ProfileAdmin(admin.ModelAdmin):
list_display = ('user', 'phone_number')

admin.site.register(Profile, ProfileAdmin)

并且在用户模型中成功创建了配置文件模型。

在为用户创建新帐户时在views.py中

class CustomerSignUpView(View):
def post(self, request):
    name_r = request.POST.get('customer_username')
    password_r = request.POST.get('customer_password')
    email_r = request.POST.get('customer_email')
    contact_number_r = request.POST.get('customer_contact_number')
    profile_picture_r = request.FILES['customer_profile_picture']

     # this is how i am saving contact number, profile picture for Profile model.

    if checkemail(email_r):
        c = User.objects.create_user(username=name_r, password=password_r, email=email_r)
        c.save()

        # add the following code
        p = Profile(user=c, phone_number=contact_number_r, profile_picture=profile_picture_r)
        p.save()       

        return render(request, 'catalog/customer_login.html')
    else:
        return render(request, 'catalog/customer_signup.html')

def get(self, request):
    return render(request, 'catalog/customer_signup.html')

但是,在注册页面创建新用户帐户时,我遇到以下错误:

我不明白如何使用 save() 方法保存配置文件模型的那些新创建的字段。

更新:找到解决方案-

在views.py中,这就是我在Profile模型中保存字段的方式

     p = Profile(user=c, phone_number=contact_number_r, profile_picture=profile_picture_r)
     p.save()

现在,每当我注册新用户时,用户名、个人资料图片和电话号码也会添加到个人资料模型中,甚至在删除/更新个人资料详细信息期间,更改也会反映在用户和个人资料模型中

以下链接对我的项目要求很有用:

http://books.agiliq.com/projects/django-orm-cookbook/en/latest/one_to_one.html http://books.agiliq.com/projects/django-orm-cookbook/en/latest/one_to_one.html


首先,保存用户后不需要保存配置文件的实例:

 @receiver(post_save, sender=User)
  def save_user_profile(sender, instance, **kwargs):
    instance.profile.save()

删除上面的代码。要回答您的问题,如果未创建用户实例,那么您不想创建配置文件实例,因此无需担心该部分。请将以下代码添加到您的admin.py将管理员用户表单与配置文件一合并。

class ProfileInline(admin.StackedInline):    
    model = Profile
    can_delete = False
    verbose_name_plural = 'Profile'
    fk_name = 'user'

另外,建议您继续阅读this https://simpleisbetterthancomplex.com/tutorial/2016/11/23/how-to-add-user-profile-to-django-admin.html.

您不应该直接从帖子中获取值。这不是一种安全的方法。要么使用基本形式并从中获取数据cleaned_data字典或使用 ModelForm。

我假设您是 Django 新手,如果您不太热衷于使用基于类的视图,建议您使用基于函数的视图。当您看到所有步骤时,这对您来说会很容易。

Follow this https://simpleisbetterthancomplex.com/tutorial/2017/02/18/how-to-create-user-sign-up-view.html一。如果不this https://stackoverflow.com/q/51371675/7470786将解决您的问题,因此您可以将代码调整为这一问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

django:使用一对一扩展用户模型:如何保存()配置文件模型的字段 的相关文章

  • Django Admin DateTimeField 显示 24 小时格式时间

    我尝试了谷歌 但没有找到解决方案 在Django管理端 我正在显示开始日期 and end date随着时间的推移 但时间已在24 hr格式 我想显示它12 hr format class CompanyEvent models Model
  • Django 将所有未捕获的 url 路由到包含的 urls.py

    我希望每个不以 api 开头的网址都使用 foo urls py urls py from django conf urls import include url from foo import urls as foo urls urlpa
  • 动态创建类 - Python

    我需要动态创建一个类 为了更详细地讲 我需要动态创建 Django 的子类Form class 通过 动态 我打算根据用户提供的配置创建一个类 e g 我想要一个名为CommentForm这应该子类化Form class 该类应该有一个选定
  • django jet 中的自定义徽标

    我目前正在尝试对 django 管理面板的皮肤进行一些定制 以使其更符合我们的品牌 目前我们使用 django jet 来美化管理面板 django jet 可以自定义 css html 吗 所有评论都说我应该更改一些 html 文件 但我
  • Django 不断迁移相同的外键

    我正在将现有数据库导入到它自己的 Django 项目中 我已经从数据库生成了初始模型 通过inspectdb 并且通过注释使 Django 能够一次控制每个表managed False表元设置中的行 我从简单的模型开始 在启用带有外键的表时
  • django AuditTrail 与还原

    我正在开发一个新的网络应用程序 我需要将数据库中的任何更改存储到审核表中 此类审计表的目的是 稍后在真正的物理审计中 我们可以确定在某种情况下发生了什么 谁编辑了什么以及数据库当时的状态是什么 复杂的计算 所以大多数审计表将被写入而不是读取
  • Google App Engine Flexi 上 Django 的 Postgres 设置

    我正在尝试在应用程序引擎灵活环境中使用 postgres 设置 django 我按照这里的说明进行操作 https cloud google com appengine docs flexible python using cloud sq
  • 无故运行测试时 PyCharm 抛出“AttributeError: 'module' object has no attribute”

    因此 我有一个 Django REST Framework 项目 有一天它无法在 PyCharm 中运行测试 从命令行我可以使用它们来运行它们paver or the manage py直接地 曾经有一段时间 当我们没有在文件顶部导入类的超
  • “一旦获取切片就无法更新查询”。最佳实践?

    由于我的项目的性质 我发现自己不断地从查询集中取出切片 如下所示 Thread objects filter board requested board id order by updatedate 10 但这给我带来了实际对我选择的元素进
  • Django通用外键和select_相关

    我试图使用与通用外键的关系来选择模型 但它没有按预期工作 我认为用代码可以更好地说明和理解 class ModelA models Model created models DateTimeField auto now add True c
  • Django Rest Framework 删除 csrf

    我知道有关于 Django Rest Framework 的答案 但我找不到解决我的问题的方法 我有一个具有身份验证和一些功能的应用程序 我向其中添加了一个新应用程序 它使用 Django Rest Framework 我只想在这个应用程序
  • 测试使用 South 迁移的 Django 应用程序

    我正在尝试为使用 South 迁移的 Django 应用程序创建一些功能测试 最终 我还将创建斜纹测试 当我尝试运行现有测试时 由于南方迁移出现问题 测试数据库未成功创建 58 次迁移中的第 7 次失败 看起来 为了测试的目的 最好从 Dj
  • Django 选择性转储数据

    是否可以有选择地过滤哪些记录Django的dumpdata管理命令输出 我有几个模型 每个模型都有数百万行 我只想转储一个模型中符合特定条件的记录 以及引用任何这些记录的所有外键链接记录 考虑这个用例 假设我有一个生产数据库 其中我的用户模
  • 如何在Django项目中使用PostgreSQL的存储过程或函数

    我正在开发一个 Django 项目 我决定在 PostgreSQL 中编写逻辑代码 而不是用 Python 编写 因此 我在 PostgreSQL 中创建了一个存储过程 例如 存储过程如下所示 create or replace proce
  • Django REST Framework ManyToMany 过滤多个值

    我有两个模型 一个定义用户 另一个定义这些用户的标签 我正在使用 Django REST Framework 创建 API 我希望能够查询至少包含标签 id 1 和 2 的用户 例如 如果用户的标签是 1 2 1 2 3 2 3 1 3 我
  • Django:使用条件 {% extends %} 使 {% block "div" %} 成为条件

    我想分享一个 AJAX 和常规 HTTP 调用之间的模板 唯一的区别是一个模板需要扩展 base html html 而另一个则不需要 我可以用 extends request is ajax yesno app base ajax htm
  • 如何使用Python在Django for Windows中激活虚拟环境?

    我被告知要在 Django for Windows 中激活虚拟环境 我应该尝试 environment path Scripts activate 但是当我输入该命令时 cmd 返回此错误 该系统找不到指定的路径 我通过输入以下命令创建了虚
  • Django 的内联管理:一个“预填充”字段

    我正在开发我的第一个 Django 项目 我希望用户能够在管理中创建自定义表单 并向其中添加字段当他或她需要它们时 为此 我在我的项目中添加了一个可重用的应用程序 可在 github 上找到 https github com stephen
  • 如何通过 TLS 1.2 运行 django runserver

    我正在本地 Mac OS X 机器上测试 Stripe 订单 我正在实现这段代码 stripe api key settings STRIPE SECRET order stripe Order create currency usd em
  • 在 JavaScript 函数的 Django 模板中转义字符串参数

    我有一个 JavaScript 函数 它返回一组对象 return Func id name 例如 我在传递包含引号的字符串时遇到问题 Dr Seuss ABC BOOk 是无效语法 I tried name safe 但无济于事 有什么解

随机推荐