2015-08-07 5 views
5

Wyobraź mamy model tak:W Django Admin w relacji wiele-do-One pokazują listy wyboru, aby wybrać istniejącą „Wiele” z „One”

class Container(models.Model): 
    name = models.CharField(max_length=60) 

class Element(models.Model): 
    container = models.ForeignKey(Container, blank=True, null=True) 

Container jest jeden , Element jest wiele.

W Django administratora, jeśli dodać StackedInline z model=Element do inlines z Container modelu admin:

class Inline(admin.StackedInline): 
    model = Element 

class ContainerAdmin(admin.ModelAdmin): 
    inlines = (Inline,) 

admin.site.register(Container, ContainerAdmin) 

I skończyć z formset pozwalając mi wejść nowychElement przedmiotów na Dodaj Formularz kontenera.
Zamiast tego, chciałbym otrzymać widżet wyboru, aby wybrać obiekty istniejąceElement.

Czy to możliwe bez wprowadzania dodatkowego modelu?

Odpowiedz

3

Myślę, że powinieneś być w stanie zrobić to tak:

class ContainerAdminForm(forms.ModelForm): 
    class Meta: 
     model = Container 
     fields = ('name',) 
    element_set = forms.ModelMultipleChoiceField(queryset=Element.objects.all()) 

class ContainerAdmin(admin.ModelAdmin): 
    form = ContainerAdminForm 

# register and whatnot 

nie wiem, że mam coś takiego w moim projekcie, ale dam ci znać, jeśli coś znajdę. Być może trzeba będzie zastąpić metodę save() w formularzu, aby faktycznie zapisać wybrane s Element s; Nie wiem, czy wystarczy nazewnictwo pola element_set (lub jakakolwiek nazwa odwrotnej relacji).