Остановить Django от автозаполнения многих полей в админке - PullRequest
0 голосов
/ 01 марта 2019

У меня есть следующие модели:

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 и заполняю любой из множества petal_color или petal_outer_color данными, другое множество многих полей автоматически заполняется при сохранении.Как я могу предотвратить это?Ничто не отображается как ошибка, и я попытался вернуться и удалить и повторно ввести данные, но это все еще происходит

1 Ответ

0 голосов
/ 01 марта 2019

Попробуйте использовать симметричный = False в ManyToManyField, это может вызвать проблему, поскольку у вас есть два поля 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

По умолчанию значение симметричного равно True для поля «многие ко многим», что является двунаправленным отношением.Предполагается, что поле ManyToManyField является симметричным, то есть если я твой друг, то ты мой друг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...