2013-01-10 5 views
6

Jak dołączyć powiązane pola w interfejsie API?Django Rest Framework - odwrotne relacje

class Foo(models.Model): 
    name = models.CharField(...) 

class Bar(models.Model): 
    foo = models.ForeignKey(Foo) 
    description = models.CharField() 

Każdy Foo ma kilka barów powiązanych z nim, takich jak obrazy czy co.

Jak mogę wyświetlić te paski w zasobach Foo?

z tastypie jej rzucić proste, nie jestem pewien z Django Framework Rest ..

Odpowiedz

8

mam to działa! Shweeet!

Ok to co zrobiłem:

Utworzony serializers ciami, adresy URL obiektu Bar w sposób opisany w docs QuickStart Django REST Framework.

Następnie w Foo serializer Zrobiłem to:

class FooSerializer(serializers.HyperlinkedModelSerializer): 
    # note the name bar should be the same than the model Bar 
    bar = serializers.ManyHyperlinkedRelatedField(
     source='bar_set', # this is the model class name (and add set, this is how you call the reverse relation of bar) 
     view_name='bar-detail' # the name of the URL, required 
    ) 

    class Meta: 
     model = Listing 

właściwie jej prawdziwe proste, docs prostu nie pokazują go dobrze powiedziałbym ..

+0

To nie działa dla mnie. Wystąpił błąd informujący, że adresu URL nie można rozwiązać. Dodałem adres URL do mojego reszta/urls.py i to działa. Nie jestem pewien, co robię źle. – sweyrick

+3

Chciałem tylko podziękować !!!!!!! Dokumentacja na ten temat jest słaba. – whoisearth

3

Te dni można osiągnąć poprzez po prostu dodawanie odwrotnej relacji do krotki fields.

W twoim przypadku:

class FooSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Foo 
     fields = (
      'name', 
      'bar_set', 
     ) 

Teraz "bar" -Set zostaną uwzględnione w odpowiedzi Foo.

+0

Robię to samo, w odpowiedzi zagnieżdżonej, powiedzmy, że są 4 paski związane, to otrzymuję 4 puste jsons, nie wiem dlaczego to nie działa, liczba działa poprawnie – Sugam