【问题标题】:How to insert default value in database table when user account is created in Django?在 Django 中创建用户帐户时如何在数据库表中插入默认值?
【发布时间】:2019-10-11 17:09:33
【问题描述】:

我正在使用 postgre 数据库,我的数据库中有 10 个通道。这是我使用 channelId 和 userId 作为外键的模型:

class Count(models.Model):
    userId = models.ForeignKey(User, on_delete=models.CASCADE)
    channelId = models.ForeignKey(News_Channel, on_delete=models.CASCADE)
    rate = models.PositiveIntegerField(default=0)

    def __str__(self):
        return self.channelId.name

    class Meta:
        ordering = ["-id"]

我希望在创建用户帐户时在表中插入 3 行,将所有 3 个 channelId 和速率值设置为 0。 假设用户注册并获得 userIid 99,然后在表中插入 3 行作为

userId channelId rate
99         1      0
99         2      0
99         3      0

可能的解决方案是什么。

【问题讨论】:

标签: django python-3.x django-models django-views django-authentication


【解决方案1】:

有两种可能的解决方案:

  1. 您可以使用信号。为您的 AUTH_USER_MODEL 创建一个 post_save 信号。它通常用于在调用模型的 save() 方法之后执行一些逻辑。在该信号函数中编写逻辑,为所有通道和速率创建计数。您可以从 post_signal 获取 ATUTH_USER_MODEL 的 id。

    参考https://docs.djangoproject.com/en/2.2/topics/signals/

  2. 为您的 AUTH_USER_MODEL 创建一个注册用户的逻辑,并在创建用户后,为所有通道和速率创建计数。

【讨论】:

  • 我做了,但过程很慢。
  • 您可以将 Count 创建作为异步任务,这样 HTTP 请求就不必等待完成。
猜你喜欢
  • 2016-11-12
  • 2018-10-28
  • 1970-01-01
  • 1970-01-01
  • 2016-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多