首页 > 解决方案 > 从 django 中的多到多字段获取信息

问题描述

我的模型:

class User_Detail(models.Model):
 username = models.CharField(max_length=50, unique=True, null=False)
 email = models.EmailField(unique=True, null=False)
 password = models.CharField(max_length=50)
 auth_token = models.CharField(max_length=100, default=None, null=True)


class Board(models.Model):
 unique_id = models.CharField(max_length=100, null=False, unique=True)
 created_by = models.ForeignKey(User_Detail, on_delete=models.CASCADE, related_name="board_creator")
 name = models.CharField(max_length=100, null=False, unique=
True)


# membership
class UserBoardMapping(models.Model):
 user = models.ManyToManyField(User_Detail)
 board = models.ManyToManyField(Board)
 user_type = models.CharField(max_length=10, choices=USER_TYPE, default='moderator')

如何获取members具有特定板 id 的所有用户?我想在我的输出中使用板 id 的用户信息。

标签: pythondjangodjango-modelsdjango-rest-frameworkdjango-views

解决方案


我认为您的模型结构不正确。因为您使用 2 多对多关系来映射用户和董事会之间的关系,所以一个就足够了。如果你想存储类似的附加信息is_moderator,那么试试这样用through.

class User_Detail(models.Model):
 username = models.CharField(max_length=50, unique=True, null=False)
 email = models.EmailField(unique=True, null=False)
 password = models.CharField(max_length=50)
 auth_token = models.CharField(max_length=100, default=None, null=True)


class Board(models.Model):
 unique_id = models.CharField(max_length=100, null=False, unique=True)
 created_by = models.ForeignKey(User_Detail, on_delete=models.CASCADE, related_name="board_creator")
 name = models.CharField(max_length=100, null=False, unique=
True)
 users = models.ManyToManyField(User_Detail, through='UserBoardMapping')


# membership
class UserBoardMapping(models.Model):
 user = models.ForeignKey(User_Detail, on_delete=models.DO_NOTHING, related_name='boards')
 board = models.ForeignKey(Board, on_delete=models.DO_NOTHING, related_name='users')
 user_type = models.CharField(max_length=10, choices=USER_TYPE, default='moderator')

然后你可以查询User_Detail这样的Board

board = Board.objects.first()
users = User_Detail.objects.filter(boards__board=board)

推荐阅读