如何在django中使用一个模型字段引用多个模型对象?

时间:2017-12-26 16:03:22

标签: django postgresql django-models

假设我有项目经理模型。

        var user = await _userManager.FindByNameAsync(context.UserName);
        if (user == null) {
            user = await _userManager.FindByEmailAsync(context.UserName);
        }

具有不同名称和角色的经理可以拥有相同的项目。

PostgreSQL为此实现提供了ArrayField。但我想要一个适用于任何数据库的解决方案。任何替代解决方案都会非常值得注意。

3 个答案:

答案 0 :(得分:0)

您使用多对一关系,在Django中可以通过在Project上定义指向Manager的ForeignKey来完成。

答案 1 :(得分:0)

在Django中,您可以使用ForeignKey模型字段定义多对一关系,然后,框架将自动为您创建反向关系。

screen

现在您的API可以用作:

class Project(models.Model):
    name = models.CharField(max_length=50)
    manager = models.ForeignKey('Manager', related_name='projects')

class Manager(models.Model):
    name = models.CharField(max_length=50)

请注意,我们在Project对象的Many侧定义了my_manager = Manager(name='Hasanul') project_one = Project(name='foo', manager=my_manager) project_two = Project(name='bar', manager=my_manager) # you can use the reverse relationship (defined with a related name). # note that it won't return an Array, it's a QuerySet object, that # behaves like an array. my_manager.projects.all() # [Project<name: 'foo'>, Project<name: 'bar'>] # or the direct one: project_one.manager # Manager<name: 'Hasanul'>

答案 2 :(得分:0)

您所说的是经理可以管理多个项目。如果您的业务逻辑允许项目拥有多个经理,那么项目与经理之间的关系为Many-To-Many relationship。否则,您有Many-to-one relationship