2017-01-29 17 views
7

Postanowiłem przenieść część funkcji z mojej strony administratora do interfejsu. Funkcjonalność obejmuje administrowanie jednym modelem z pewnymi inlinami klucza obcego.Włączanie funkcji administratora Django w interfejsie z liniami

W tym celu zainstalowałem wtyczkę JJuery Django-dynamic-formset (link git) i już od kilku dni borykam się z nią. Oto jeden z problems.

Ta sama funkcja jest już zaimplementowana w administratorze Django. Mogę dodawać, modyfikować, usuwać inlines i modyfikować instancję modelu tak, jak chcę. Zastanawiam się, dlaczego powinienem używać tej wtyczki JQuery i dlaczego nie ma zbyt wielu dobrych samouczków na ten temat w Internecie?

Potrzebuję dobrego i niedawnego przykładu użycia formsenów django lub wbudowanych formularzy po stronie frontowej bez plików JS stron trzecich. Będę zadowolony, jeśli ma linki (nie pola wyboru), aby usunąć elementy wbudowane i dodać przycisk, który poprawnie doda nowy wbudowany.

Aby być bardziej konkretny, ponieważ kwestia została uznana za zbyt szeroki:

mam dwa modele szkolne i SchoolPlace:

class School(models.Model): 
    name = models.CharField(_('School name'), max_length=100) 

class SchoolPlace(models.Model): 

    school = models.ForeignKey(School, verbose_name=_('school place'), related_name='school_places', blank=True, null=True) 

    name = models.CharField(_('School place name'), max_length=200) 

    city = models.ForeignKey(City, blank=True, null=True, verbose_name=_('city'), 
        help_text='city') 

Istnieją również odpowiednie formy:

class SchoolForm(forms.ModelForm): 

     name = forms.CharField(
          label=_('Name'), 
          widget=forms.TextInput(attrs={ 
           'placeholder': _('school name')}), 
           max_length=100, required=True) 

class SchoolPlaceForm(forms.ModelForm): 

    name = forms.CharField(label=_('Name'), 
          widget=forms.TextInput(
             attrs={'placeholder': _('school place name')}), 
             max_length=200, 
             required=False) 

    city = forms.ModelChoiceField(label=_('City'), 
            widget=forms.Select(attrs={'class': 'ui search dropdown'}), 
            queryset=City.objects.all(), required=False) 

    class Meta: 
     model = SchoolPlace 
     fields = ['name','city'] 
     exclude = ['school'] 

Chciałbym edytować te dwa modele w taki sam sposób, jak robi to administrator Django, ale tylko w moim własnym interfejsie. O ile wszystkie pliki js są już w django.contrib.admin, chciałbym to zrobić bez użycia aplikacji pobocznych i wtyczek.

Potrzebuję tej samej funkcjonalności co w administratorze Django: dodawaj, usuwaj, modyfikuj inline SchoolPlace. Oto zrzut ekranu: enter image description here

Odpowiedz

1

Proponuję użyć formularzy administracyjnych (w widokach) lub widoków administracyjnych (na niestandardowych adresach URL) i po prostu zmienić szablony admina, lub nawet po prostu załadować javascript administratora, można znaleźć do szablonów administratora.

+0

Czy możesz podać przykład pracy? –

1

To zadanie wymaga obsługi po stronie frontend i backend.

Wygląda na to, że najprostszym sposobem jest użycie formularzy django-admin na interfejsie użytkownika, jeśli jest to dla ciebie akceptowalne.

Wszelkie formularze administratora django rozpoznają w adresie URL parametr ?_popup=1, aby pominąć dekoracje strony administratora i wyświetlić tylko jeden formularz. Wszystkie niezbędne style JavaScript i CSS zostaną uwzględnione. Więc formularze administracyjne mogą być wyświetlane na frontend w iframe. Wymagane jest małe hakowanie na poziomie JavaScript w celu dostosowania formatu iframe do formularza i powiadomienia strony, a następnie zamknięcie formularza.

+0

Dziękujemy! Myślę, że będzie zbyt dużo miejsca na osadzanie wewnątrz iframe. Zastanawiam się nad wykorzystaniem plików admin js, które znajdują się w statycznym z własnym szablonem i renderowanym formularzem. –

Powiązane problemy