Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django理解嵌套模型上的uniq约束_Django_Django Models - Fatal编程技术网

Django理解嵌套模型上的uniq约束

Django理解嵌套模型上的uniq约束,django,django-models,Django,Django Models,具有以下模型的 class Department(models.Model): name = models.CharField(max_length=10) class Person(models.Model): name = models.CharField(max_length=10) class Position(models.Model): name = models.CharField(max_length=10) person

具有以下模型的


class Department(models.Model):
    name = models.CharField(max_length=10)
    
class Person(models.Model):
    name = models.CharField(max_length=10)
    

class Position(models.Model):
    name = models.CharField(max_length=10)
    person = models.ForeignKeyField(to=Position)
    department = models.ForeignKeyField(to=Department)
我想保证一个人在一个部门是独一无二的(意味着在一个部门只能有一个职位)。我的建议是对位置进行限制, 但我不明白

  • 什么Q语句用于条件
  • 我希望会有像
    Q()
    这样的东西,但我找不到

    编辑:如果存在更复杂的关系怎么办:

    class Company(models.Model):
        name = models.CharField(max_length=10)
    
    
    class Department(models.Model):
        name = models.CharField(max_length=10)
        models.ForeignKey(to=Company)
    
    
    class Person(models.Model):
        name = models.CharField(max_length=10)
        
    
    class Position(models.Model):
        name = models.CharField(max_length=10)
        person = models.ForeignKeyField(to=Position)
        department = models.ForeignKeyField(to=Department)
    

    一个人在一家公司应该只有一个职位吗?

    你需要的只是与列出的职位的唯一约束


    这确保了数据库中只存在同一个人和部门的一个组合

    所以,如果我在部门和公司之间也有FK关系,我想确保一个人对公司来说是唯一的?(抱歉,尝试了一个最小的示例--不起作用…)
    class Company(models.Model):
        name = models.CharField(max_length=10)
    
    
    class Department(models.Model):
        name = models.CharField(max_length=10)
        models.ForeignKey(to=Company)
    
    
    class Person(models.Model):
        name = models.CharField(max_length=10)
        
    
    class Position(models.Model):
        name = models.CharField(max_length=10)
        person = models.ForeignKeyField(to=Position)
        department = models.ForeignKeyField(to=Department)
    
    UniqueConstraint(fields=['person', 'department'], name='unique_department_person')