模型字段如何使用用户 ID 自动成为字段

How model field will be field automatically with the user ids

我正在为我的 django 项目创建一个 payment/paid-subscription。我决定创建一个单独的支付应用程序并将其连接到我的 django 项目。在下面,您会看到付款模型,我希望它具有用户 ID 及其付款状态(现在只想从 default=False 开始):

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User

class Payment(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    paid = models.BooleanField(default=False)


    class Meta:
        db_table = 'payment'
  1. 我创建了这个,但是在数据库 table 中,我看到 user_idpaid 是空的,而我已经有很多用户注册了。如何 将这些 ID 带到这里,默认为 false paid?
  2. 我应该怎么做才能在每次新注册后填写 django 也是这个型号?

第 1 部分 - 更新现有用户以获得付款

Django 不会自动为您执行此操作,您可以进入 shell,并为每个用户创建 Payment 个实例:

输入shell (python manage.py shell)

from myapp.models import Payment

users = User.objects.all()
for user in users:
    Payment.objects.create(user=user, paid=False)

如果你想更有效率,你可以这样做:

payments = [Payment(user=user, paid=False) for user in User.objects.all()]
Payment.objects.bulk_create(payments)

如果这是您已经在其他地方部署的应用程序,您应该创建一个数据迁移来为您执行此操作:

from django.db import migrations

def create_payments(apps, schema_editor):
    Payment = apps.get_model('yourappname', 'Payment')
    User = apps.get_model('yourappname', 'User')
    payments = [Payment(user=user, paid=False) for user in User.objects.all()]
    Payment.objects.bulk_create(payments)

class Migration(migrations.Migration):

    dependencies = [
        ('yourappname', '0001_initial'),
    ]

    operations = [
        migrations.RunPython(create_payments),
    ]

第 2 部分 - 在每次新注册时创建付款

这在很大程度上取决于您的注册方式,因此很难给出准确的答案。但是无论你的新用户对象是在哪里创建的,你只需要添加如下内容:

Payment.objects.create(user=user, paid=False)

如果您有处理用户注册的表单,可以在该表单的 save 方法中执行。如果您使用的是 django rest 框架之类的东西,它会进入创建 User.

的任何视图