我有2个帐户和用户模型。一个帐户可以有多个用户。
同时创建第一个用户(所有者)时,将创建帐户。
因为用户有一个ForeignKey帐户,我需要先创建帐户,然后再创建用户。
但是Account有一个created_by字段,它是request.user。这是一个循环问题。
我认为我需要首先创建帐户并创建为超级用户(第一个),然后创建用户,并使用新用户更新帐户。
class Account(MetaData):
name = models.CharField(max_length=255)
created_by = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True,
related_name='%(app_label)s_%(class)s_created_by', on_delete=models.CASCADE)
class User(AbstractBaseUser):
account = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True, related_name='owner')
我该怎么做?
对于第一个用户,我只是第一次需要这个,因为在此之后,对于其他用户,帐户将存在。
当我说第一个用户时,我并不是指员工用户(作为超级用户),而是指通过注册表格强制使用帐户的普通用户。
blank=True
仅适用于工作人员。
答案 0 :(得分:2)
您的User
模型的account
字段允许空值,因此没有任何内容可以阻止您首先创建没有帐户的用户,然后使用此用户创建帐户,最后使用该帐户更新用户:< / p>
with transaction.atomic():
user = User.objects.create(account=None, ...)
account = Account.objects.create("test", created_by=user)
user.account = account
user.save(update_fields=["account"])
答案 1 :(得分:0)
由于第一个用户只是一个问题,您可能希望override the method create_superuser
of the manager添加该帐户。此外,由于您已使用public static void main(String[] args) {
boolean run = true;
Scanner scanner = new Scanner(System.in); // Init before loops
String userInput = ""; // tmp var that holds input
while (run) {
// do something
System.out.println("Another action? [Y/N]");
userInput = scanner.next(); // Read first time
// Run while user does not put Y || y || N || n
while (!userInput.matches("[YyNn]")){
System.out.println("Incorrect input");
userInput = scanner.next();
}
// User does not want more actions
if(userInput.matches("[Nn]")){
System.out.println("Do you wish to exit the program? [Y/Any other key]");
String choice = scanner.next();
// Stop the program
if (choice.toLowerCase().equals("y"))
run = false;
}
}
scanner.close(); // Close scanner outside
}
定义了ForeignKey
,因此首先创建超级用户(使用null=True
)然后创建super().create_superuser()
应该不会有问题并将其附加到超级用户。
首次部署网站时,您必须手动运行account
命令。