我有一个场景,在我的用户个人资料中,他们有一个关联的组织。我需要能够允许用户选择和设置这个组织(user_organization),但是我想这样做而不允许他们只看到应用程序中所有组织的列表(下拉菜单)。我的工作是为每个组织发布一个唯一的代码(org_code),并允许用户将该代码输入表单并将相关的组织应用于他们的个人资料。我可以很容易地理解这背后的suedocode逻辑,但是我不确定如何在我的视图和表单中实现它。如果有人可以告诉我最好的方法,或指出我正确的方向来学习如何?我们将不胜感激。请参阅下面的模型,了解事情如何结合在一起。
资料:
class Profile(models.Model):
Super_Admin = "Super_Admin"
Admin = "Admin"
Manager = "Manager"
Developer = "Developer"
ROLE_CHOICES = (
(Super_Admin, 'Super_Admin'),
(Admin, 'Admin'),
(Manager, 'Manager'),
(Developer, 'Developer'),
)
user = models.OneToOneField(User, on_delete=models.CASCADE)
user_group = models.OneToOneField(Group, on_delete=models.CASCADE, blank=True, null=True)
user_organization = models.OneToOneField(Organization, on_delete=models.CASCADE, blank=True, null=True)
role = models.CharField(choices=ROLE_CHOICES, default="Developer", max_length=12)
activation_key = models.CharField(max_length=120, blank=True, null=True)
activated = models.BooleanField(default=False)
def __str__(self):
return self.user.username
组织:
class Organization(models.Model):
org_name = models.CharField(max_length=120, blank=False, unique=True)
org_code = models.CharField(max_length=120, blank=False, unique=True, default=GenerateOrganozationCode)
答案 0 :(得分:0)
使用上述评论中的额外信息回答:
“我希望他们能够将代码输入到文本字段中,在提交时,如果它与组织模型中的代码(org_code)匹配,则它将使用正确的(org_name)填充其配置文件中的(user_organization) )“
在视图的逻辑中,您需要提取org_code。您还应该将组织的org_code作为对象的主键(您不必,但如果pk是组织代码则会更容易)。从这里,您可以使用组织的主键值映射org_code。
Organization.objects.get(pk=the_entered_org_code)
如果您不想将组织代码指定为对象的主键,则可以只过滤组织代码。
Organization.objects.filter(org_code=the_entered_org_code)
这应该让你开始。