我有以下型号:
class Color(models.Model):
name = models.CharField(max_length=50, null=False, blank=False)
def __str__(self):
return self.name
class Flower(models.Model):
flower_number = models.PositiveSmallIntegerField(
default=1,blank=True, null=True)
petal_color = models.ManyToManyField(Color,blank=True, related_name="%(app_label)s_%(class)s_petal",
related_query_name="%(app_label)s_%(class)s")
petal_outer_color = models.ManyToManyField(Color,blank=True, related_name="%(app_label)s_%(class)s_petal_outer",
related_query_name="%(app_label)s_%(class)s")
class Meta:
abstract = True
class Plant(Flower):
name = models.CharField(max_length=50, null=False, blank=False, unique=True)
在管理员上,我只有:
admin.site.register(Plant)
当我进入Django管理员并用数据填充manytomany petal_color
或petal_outer_color
中的任何一个时,其他manytomany字段在保存时会自动填充。如何阻止这种情况的发生?什么都没有显示为错误,我尝试返回并删除并重新输入数据,但仍然会发生
答案 0 :(得分:0)
尝试在ManyToManyField中使用symmetrical = False,这可能会引起问题,因为您有两个M2M字段都使用同一模型。 在Django文档中阅读对等符号。
做这样的事情
class Flower(models.Model):
flower_number = models.PositiveSmallIntegerField(
default=1,blank=True, null=True)
petal_color = models.ManyToManyField(Color,blank=True, symmetrical=False related_name="%(app_label)s_%(class)s_petal",
related_query_name="%(app_label)s_%(class)s")
petal_outer_color = models.ManyToManyField(Color,blank=True, symmetrical=False, related_name="%(app_label)s_%(class)s_petal_outer",
related_query_name="%(app_label)s_%(class)s")
class Meta:
abstract = True
默认情况下,对多对多字段,symmetrical的值为True,这是双向关系。 假设ManyToManyField是对称的-也就是说,如果我是您的朋友,那么您就是我的朋友。