Django:非对称多对多关系
Django: Asymmetric ManyToMany Relation
我是 django
的新手,非常感谢您对以下问题的意见。
存在两个模型,即A
和B
。 A
的实例必须至少属于 B
的一个实例,而 B
可以包含从 0 到无限的任意数量的 A
实例。
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
应该用于两个模型。问题是,据我所读,必须使用 blank = false
来防止 A
的 null
分配(因为 A
必须至少分配给一个 B
) 但 B
可能没有分配的 A
(因此不应该有 blank = false
语句。任何不对称的 ManyToMany
关系都可以在 django
Model
?
您应该将 ManyToManyField 放在 A 中,其中 null=False
和 blank=False
(默认情况下,您做对了)。这样,即使没有现有的 A 实例,您也可以毫无问题地创建 B 实例。
当您创建 A 的实例时,blank=False
确保 B_list 字段是必需的。 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
的区别,请参见 post:
differentiate null=True, blank=True in django
我是 django
的新手,非常感谢您对以下问题的意见。
存在两个模型,即A
和B
。 A
的实例必须至少属于 B
的一个实例,而 B
可以包含从 0 到无限的任意数量的 A
实例。
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
应该用于两个模型。问题是,据我所读,必须使用 blank = false
来防止 A
的 null
分配(因为 A
必须至少分配给一个 B
) 但 B
可能没有分配的 A
(因此不应该有 blank = false
语句。任何不对称的 ManyToMany
关系都可以在 django
Model
?
您应该将 ManyToManyField 放在 A 中,其中 null=False
和 blank=False
(默认情况下,您做对了)。这样,即使没有现有的 A 实例,您也可以毫无问题地创建 B 实例。
当您创建 A 的实例时,blank=False
确保 B_list 字段是必需的。 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
的区别,请参见 post:
differentiate null=True, blank=True in django