使用Django在单个DropDown中组合两个表的数据



问题:我有两个表用户和用户组,在该特定页面的请求需要从表在一起,因为有特定的下拉菜单来显示它们,并且在完成该页面的操作后,数据将在POST请求中返回(下面给出了当前的模型结构),我不知道如何在所有这三个表中建立连接,以便对其进行管理,请告诉我。

型号:User.py

class Users(AbstractBaseUser):
vendor_name = models.ForeignKey(Vendor, on_delete=models.CASCADE, default=None, null=True)
username = models.CharField(max_length=100, verbose_name="username", unique=True)
password = models.CharField(max_length=100)
created_by = models.DateField(verbose_name="created_by", auto_now_add=True)
USERNAME_FIELD = "username"
REQUIRED_FIELDS = ['password', 'hardware_id']
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
is_role_vendor = models.BooleanField(default=False)
is_role_customer = models.BooleanField(default=True)
def __str__(self):
return self.username
objects = UserManager()

型号:UserGroup.py

class UserGroup(models.Model):
vendor_id = models.ForeignKey(Vendor, on_delete=models.CASCADE, default=None, null=True)
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=100)
description = models.CharField(max_length=1000)
users = models.ManyToManyField(Users)
def __str__(self):
return self.name

型号:Rules.py

class Rules(models.Model):
vendor_id = models.ForeignKey(Vendor, on_delete=models.CASCADE, default=None, null=True)
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=100)
description = models.CharField(max_length=1000)
# Here i need to mention the code for field where i can store the combined value of User and UserGroup [selected from the dropdown].
def __str__(self):
return self.name

需要解决方案:

  1. 我如何在View中编写代码来获取两个表的数据,并将其发送给DropDown。{GET请求}
  2. 我将如何将相同的值一起存储在规则表中{正如我所说,DropDown由两个值组成,并且可以全部选择一起。}
  3. 模型的结构{具有所需的更改}

没有现成的解决方案。我可以建议把这个下拉列表一分为二。第一个是UserGroup,第二个是User。您可以使用ajax或htmx->基于所选UserGroup来填充用户下拉列表;htmx值选择

在您的模型中规则(应为规则)添加字段:

user = models.ForeignKey(Users, on_delete=models.CASCADE)
group = models.ForeignKey(UserGroup, on_delete=models.CASCADE)

如果每个用户(也应该是用户)/UserGroup只能有一个规则,则将unique_tigether添加到模型规则:

unique_together = ['user', 'group']

django文档unique_together

最新更新