Необязательные дополнительные данные о ManyToManyField - PullRequest
2 голосов
/ 14 мая 2011

У меня есть ManyToManyField в Django, и я хочу сохранить дополнительную информацию для отношения.То, что я делаю, это

class Speaker(models.Model):
    name = models.CharField(max_length=50)
    title = models.CharField(max_length=100, blank=True)
    description = models.TextField(blank=True)

class Event(models.Model):
    title = models.CharField(max_length=120)
    speakers = models.ManyToManyField(Speaker, blank=True, null=True, through='Role')

class Role(models.Model):
    speaker = models.ForeignKey(Speaker)
    event = models.ForeignKey(Event)
    role = models.CharField(max_length=50, blank=True)

Согласно документации , это мешает Django выполнять некоторые автоматические действия.Что особенно раздражает, так это то, что он делает список Спикеров недоступным при создании события в администраторе.

Я понимаю, что в общем случае Django не знает, что поместить в поле Role.role.Но это необязательно (blank=True).Я ожидаю, что

  • либо Django распознает, что Role имеет только необязательные поля, и позволяет мне использовать отношение многие ко многим как обычно (создание полей с пустым значением по умолчанию), либо
  • Администратор Django позволяет мне добавлять Speakers во вновь созданное событие, и для каждого такого Speaker он запрашивает дополнительную информацию (значение Role.role).

Вторая возможность была бы более полезной и более полезной.Вообщем чем первый.Тем не менее администратор Django не выполняет ни одного из этих двух действий: вместо этого поле «Динамики» удаляется из события.

Есть ли способ заставить администратора Django вести себя так, как описано выше?

1 Ответ

0 голосов
/ 17 мая 2011

Решение лежит в этом ответе .Вкратце, следует использовать InlineModelAdmin, как указано здесь .Это реализует точно второе поведение, которое я описал.

...