阻止Django自动填充admin中的许多内容

时间:2019-03-01 08:20:02

标签: django django-models django-admin many-to-many

我有以下型号:

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_colorpetal_outer_color中的任何一个时,其他manytomany字段在保存时会自动填充。如何阻止这种情况的发生?什么都没有显示为错误,我尝试返回并删除并重新输入数据,但仍然会发生

1 个答案:

答案 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是对称的-也就是说,如果我是您的朋友,那么您就是我的朋友。

相关问题