【问题标题】:How to append a database table created by a django model如何附加由 django 模型创建的数据库表
【发布时间】:2017-12-30 06:21:37
【问题描述】:

我正在学习教程 https://simpleisbetterthancomplex.com/tutorial/2017/02/18/how-to-create-user-sign-up-view.html 关于制作一个简单的用户注册网站。

model.py中定义的关键模型是

from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    bio = models.TextField(max_length=500, blank=True)
    location = models.CharField(max_length=30, blank=True)
    birth_date = models.DateField(null=True, blank=True)

@receiver(post_save, sender=User)
def update_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)
    instance.profile.save()

在数据库中创建表profile。我的问题是我们如何附加此表以包含用户的名字/姓氏和电子邮件等信息。我知道这些信息存储在 auth_user 中,但最好将所有内容都放在一张表上。

我是 django 平台的新手。非常感谢任何解释或参考。

【问题讨论】:

  • 为了能够为用户提供单个表,您可以使用 AbstractUser 类。阅读此答案以获取更多信息:stackoverflow.com/a/31377268/977593
  • 勾选选项 4(创建扩展 AbstractUser 的自定义用户模型),发布了一个有问题的链接。

标签: python django database postgresql


【解决方案1】:

如果您想在 Profile 模型中附加名字、姓氏和电子邮件,则不需要此 user = models.OneToOneField(User, on_delete=models.CASCADE) 所以基本上你可以删除这条线 和 将这些字段附加到模型中,例如:

first_name = models.TextField(max_length=50, blank=True)
last_name = models.TextField(max_length=50, blank=True)
email = models.TextField(max_length=200, blank=True)

然后运行命令:python manage.py makemigrations 然后 python manage.py 迁移 但我不会建议你这样做。

我建议你使用 django auth 用户模型,因为这样你就可以很容易地使用 django 的额外功能比如维护会话等。 关注:-https://docs.djangoproject.com/en/2.0/intro/tutorial01/

【讨论】:

    猜你喜欢
    • 2023-03-09
    • 2011-05-07
    • 2020-09-11
    • 1970-01-01
    • 2019-12-24
    • 2013-11-23
    • 2019-05-01
    • 1970-01-01
    • 2016-11-29
    相关资源
    最近更新 更多