Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.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
Python Django:非对称多人关系_Python_Django_Database Design - Fatal编程技术网

Python Django:非对称多人关系

Python Django:非对称多人关系,python,django,database-design,Python,Django,Database Design,我是使用django的新手,非常感谢您对以下问题的解答 存在两个模型,即A和B。A的实例必须至少属于B的一个实例,而A B可以包含从0到无限的任意数量的As实例 class A(models.Model): name = models.CharField(max_length = 128) created_date = models.DateTimeField(auto_now_add = True) modified_date = models.DateTimeField(auto

我是使用django的新手,非常感谢您对以下问题的解答

存在两个模型,即A和B。A的实例必须至少属于B的一个实例,而A B可以包含从0到无限的任意数量的As实例

class A(models.Model):
  name = models.CharField(max_length = 128)
  created_date = models.DateTimeField(auto_now_add = True)
  modified_date = models.DateTimeField(auto_now = True)

class B(models.Model):
  name = models.CharField(max_length = 128)
  created_date = models.DateTimeField(auto_now_add = True)
  modified_date = models.DateTimeField(auto_now = True)
  A_list = models.ManyToManyField(A)

好的。我认为,根据我给出的描述,这两个模型应该使用ManyToManyField。问题是,从我所读到的,必须使用BLAST=FALSE防止A的空分配,因为A必须被分配给至少一个B,但是B可能不具有分配的A,因此不应该有空白= false语句。django模型中可以实现任何非对称多个关系吗

您应该将ManyToManyField放在A中,默认值为null=False,blank=False,这样做是正确的。这样,即使不存在现有的A实例,也可以毫无问题地创建B实例

创建的实例时,blank=False确保B_列表字段是必需的。null=False确保数据库不允许null值

您的代码将变成:

class A(models.Model):
  name = models.CharField(max_length = 128)
  created_date = models.DateTimeField(auto_now_add = True)
  modified_date = models.DateTimeField(auto_now = True)      
  B_list = models.ManyToManyField('B')

class B(models.Model):
  name = models.CharField(max_length = 128)
  created_date = models.DateTimeField(auto_now_add = True)
  modified_date = models.DateTimeField(auto_now = True)
有关Django中null和blank之间的区别,请参阅本文:


我理解逻辑。那么在B_list=models.ManyToManyField'B'中是否应该有blank=False呢?另外,从我所读到的内容来看,ManyToManyField的参数是指向类的指针,而不是字符串值,在本例中,ManyToManyField'B'中的'B'。是否有我遗漏的东西或是打字错误?对于第一个问题,不需要blank=False,因为这是默认值。你可以把它放在那里,但它不会改变任何事情。这里需要字符串值,因为A模型是在B模型之上定义的。此时代码中还不存在B模型,字符串参数确保在所有模型就绪时对其进行计算。你也可以把它们换过来,把A放在B下面,简单地说manyToManyFieldB我没有想到Python代码中的顺序是相关的。昨晚我把两门课的顺序换了。非常感谢。