模型字段如何使用用户 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'
- 我创建了这个,但是在数据库 table 中,我看到
user_id
和
paid
是空的,而我已经有很多用户注册了。如何
将这些 ID 带到这里,默认为 false paid?
- 我应该怎么做才能在每次新注册后填写 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
.
的任何视图
我正在为我的 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'
- 我创建了这个,但是在数据库 table 中,我看到
user_id
和paid
是空的,而我已经有很多用户注册了。如何 将这些 ID 带到这里,默认为 false paid? - 我应该怎么做才能在每次新注册后填写 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
.