Django models 自引用模型的CreateView最佳实践
我正在寻找关于如何在两个模型相互引用的系统中进行创建的最佳实践。我想创建以下用户故事 作为一个新用户,我可以创建一个用户帐户,然后立即创建我的组织。我将被设置为主要用户,并拥有从组织中添加或删除其他常规用户的权限。我添加的任何普通用户都无法添加用户 我有这些模型:Django models 自引用模型的CreateView最佳实践,django-models,django-rest-framework,django-views,Django Models,Django Rest Framework,Django Views,我正在寻找关于如何在两个模型相互引用的系统中进行创建的最佳实践。我想创建以下用户故事 作为一个新用户,我可以创建一个用户帐户,然后立即创建我的组织。我将被设置为主要用户,并拥有从组织中添加或删除其他常规用户的权限。我添加的任何普通用户都无法添加用户 我有这些模型: class User(AbstractUser, BaseModel): org = models.ForeignKey( "Org", on_delete=models.SET_NULL,
class User(AbstractUser, BaseModel):
org = models.ForeignKey(
"Org", on_delete=models.SET_NULL, blank=True, null=True, related_name="user"
)
@property
def is_primary(self):
if self.org.primary_user.uuid == self.uuid:
return True
return False
class Org(BaseModel):
primary_user = models.ForeignKey(
User, on_delete=models.CASCADE, blank=True, null=True, related_name="user"
)
我在考虑两种方法:
方式1-创建保存后信号,自动为用户创建组织,并将主用户设置为用户。(这段代码并不完全有效,但你已经明白了)
方式2-具有启动用户(例如,新用户和新组织)和常规创建用户(需要传递组织)的视图
class InitUserView(ListCreateAPIView):
"""
Initiate User and new Org.
"""
permission_classes = [AllowAny]
queryset = User.objects.all()
serializer_class = UserSerializer # where the Org is writable
class UserCreateWithOrgView(LoginRequiredMixin, ListCreateAPIView):
"""
Create users on an existing Org.
"""
permission_classes = [(IsInResourceOrg & IsPrimaryUser) | IsStaffUser]
queryset = User.objects.all()
serializer_class = UserSerializer
对于发起用户和组织操作,最佳实践是什么:
如果你有其他建议,比如重新定义模型,我也愿意接受 您可以根据业务逻辑选择其中一种方法。如果字段可以为空,那么实际上不需要为用户自动创建组织,而应该允许用户自己填充。如果要在一个视图中创建用户和组织,请签出文档中的DRF可写嵌套序列化程序
class InitUserView(ListCreateAPIView):
"""
Initiate User and new Org.
"""
permission_classes = [AllowAny]
queryset = User.objects.all()
serializer_class = UserSerializer # where the Org is writable
class UserCreateWithOrgView(LoginRequiredMixin, ListCreateAPIView):
"""
Create users on an existing Org.
"""
permission_classes = [(IsInResourceOrg & IsPrimaryUser) | IsStaffUser]
queryset = User.objects.all()
serializer_class = UserSerializer