![](/img/trans.png)
[英]How to use Django REST framework with a model with default value for foreign key?
[英]Foreign key default value in django model
我正在使用 django 启动一个应用程序; 到目前为止我很喜欢它,但我在初始化我的数据库时遇到了麻烦。 综上所述,我需要一个表用户和一个表角色; 用户具有 FK 角色。 创建后,用户必须明确设置此角色或默认为默认角色“普通用户”。
我可以在没有数据库的情况下创建model,然后手动创建角色,然后添加默认并迁移; 但这看起来不太好; 我尝试在两个模型定义之间添加到数据库,但显然它不起作用,因为在 makemigration 命令期间未创建表。
有什么方法可以实现我想要的吗? 如果有帮助,这是我目前的模型; 随意报告任何废话; 我在学。 谢谢;)
from django.db import models
class Role(models.Model):
name = models.CharField(max_length=100)
identifier = models.CharField(max_length=20)
ts_create = models.DateTimeField(auto_now_add=True)
ts_update = models.DateTimeField(auto_now=True, default=None, null=True)
def __str__(self):
return self.name
userRole = Role.objects.get_or_create(name="Regular user", identifier="USER")
adminRole = Role.objects.get_or_create(name="Administrator", identifier="ADMIN")
ownerRole = Role.objects.get_or_create(name="Owner", identifier="OWNER")
class User(models.Model):
username = models.CharField(max_length=100, unique=True)
user_type = models.ForeignKey(Role, related_name="user_type", on_delete=models.PROTECT, default=userRole)
roles = models.ManyToManyField(Role, related_name="roles", db_table="core_roles_assignations")
ts_create = models.DateTimeField(auto_now_add=True)
ts_update = models.DateTimeField(auto_now=True, default=None, null=True)
def __str__(self):
return self.username
def is_admin(self):
return self.user_type.identifier == "ADMIN"
owner = User.objects.get_or_create(username="Nindouja", user_role=Role.objects.first())
``` python
您可以在用户创建时尝试使用Signal
保存角色。 https://docs.djangoproject.com/en/3.1/ref/signals/
理想是:当用户创建时,检查用户是否有角色。 如果没有,请为其添加默认角色。 每次您尝试创建用户时它都会起作用。 例子:
@receiver(post_save, sender= User)
def post_save_user(sender, instance, created, **kwargs):
if created:
roles = instance.roles.all() # check user have any roles
if not roles:
default_role = Role.objects.first()
instance.roles.add(default_role)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.