Mam relację M2M między dwoma modelami, która korzysta z modelu pośredniego. Dla dobra dyskusji, użyjmy przykładu z podręcznika:Widoki oparte na klasach dla relacji M2M z modelem pośrednim
class Person(models.Model):
name = models.CharField(max_length=128)
def __unicode__(self):
return self.name
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person, through='Membership')
def __unicode__(self):
return self.name
class Membership(models.Model):
person = models.ForeignKey(Person)
group = models.ForeignKey(Group)
date_joined = models.DateField()
invite_reason = models.CharField(max_length=64)
Chciałbym skorzystać z widokiem na bazie Klasy Django, aby uniknąć pisania widoki CRUD obsługi. Jednak, gdy próbuję użyć domyślnego CreateView, to nie działa:
class GroupCreate(CreateView):
model=Group
Czyni to postać ze wszystkich pól na obiekcie grupy i daje pole wielokrotnego wyboru dla pola członków, co byłoby poprawne dla prostej relacji M2M. Jednak nie można określić daty date_joined lub invite_reason, a przesłanie formularza daje następujący atrybut AttributeError:
"Nie można ustawić wartości w polu ManyToManyField, który określa model pośredniczący. Zamiast tego należy użyć menedżera członkostwa."
Czy istnieje sposób na przesłonięcie części ogólnego widoku CreateView lub utworzenie własnego widoku niestandardowego, aby zrobić to za pomocą mixins? Wydaje się, że powinno to być częścią struktury, ponieważ interfejs administracyjny atomatycznie obsługuje relacje M2M ze związkami pośrednimi za pomocą inline.
możliwy duplikat [django Nie można ustawić wartości w polu ManyToManyField, który określa model pośredniczący. Zamiast tego użyj Menedżera] (http://stackoverflow.com/questions/3091328/django-cannot-set-values-on-a-manytomanyfield- który-specifies-an-intermediary-mo) – juliocesar