Mam model, uporządkowana lista, która ma być listą obiektów zawartości uporządkowanych przez użytkownika. The OrderedList ma kilka atrybutów, w tym stronę, do której należy.Walidacja formularza w Admin z formularzem Inline i formularzem modelu
Obiekty treści są do niej dołączane za pośrednictwem klasy OrderedListRow, która jest przenoszona do administratora obiektu OrderedList za pośrednictwem wbudowanego zestawu formularzy w administratorze.
class OrderedList(GenericList):
objects = models.Manager()
published = GenericListManager()
class OrderedListRow(models.Model):
list = models.ForeignKey(OrderedList)
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveSmallIntegerField()
content_object = generic.GenericForeignKey("content_type", "object_id")
order = models.IntegerField('order', blank = True, null = True)
(Nazwa OrderedList dziedziczy pole witryny z większego streszczenia w polu Ogólne).
Oto mój problem; kiedy użytkownik zapisuje formularz administracyjny, chcę sprawdzić, czy każdy obiekt zawartości odwzorowany przez każdy obiekt OrderedListRow należy do tej samej lokacji, którą ma uporządkowana lista (lista może należeć tylko do jednej witryny, obiekty treści mogą należeć do wielu).
Mogę zastąpić formularz administratora OrderedList's clean(), ale nie zawiera on wbudowanego formularza, który zawiera obiekty OrderedListRows, więc nie może osiągnąć tych danych. Mogę zastąpić wbudowany zestaw formularzy OrderedListRows w porządku, ale nie może on dotrzeć do listy. Potrzebuję jakiś sposób w kontekście sprawdzania poprawności formularza, aby dotrzeć zarówno do danych formularza uporządkowanej listy, jak i danych formularza formularza, aby można było sprawdzić wszystkie obiekty obiektów uporządkowanych według OrderedListRow względem witryny Listy uporządkowanych i zgłaszać błąd sprawdzania poprawności, jeśli wystąpił problem. . Do tej pory nie znalazłem funkcji, że oczyszczone dane zarówno dla OrderedRow, jak i OrderedListRows są zawarte.
W końcu utworzyłem formset dla InderedListRow inline i nadpisałem jego funkcję clean(). W dokumencie udało mi się pobrać identyfikator witryny, podając site_id = self.data.get ("witryna") "Nazwa witryny" to nazwa pola witryny używanego przez nadrzędną listę uporządkowaną. Zasadniczo uzyskuję do niego dostęp bezpośrednio z danych formularza. Po otrzymaniu przesłanego identyfikatora witryny mogłem przetworzyć wszystkie formularze z zestawu OrderedListRow i porównać ich zawartość z witryną OrderedList. – KRH