DRF(以及一般的REST)的新特性。Django DRF獲取對象後的更多細節
型號:
class Event(models.Model):
name = models.CharField()
class Result(models.Model):
event = models.ForeignKey(Event, related_name='results')
person = models.CharField()
score = models.IntegerField()
串行器:
class ResultSerializer(serializers.ModelSerializer):
class Meta:
model = Result
class EventSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Event
Viewsets:
class ResultViewSet(viewsets.ModelViewSet):
queryset = Result.objects.all()
serializer_class = ResultSerializer
class EventViewSet(viewsets.ModelViewSet):
queryset = Event.objects.all()
serializer_class = EventSerializer
路由器:
router = routers.DefaultRouter()
router.register(r'events', EventViewSet)
網址:
urlpatterns = [
url(r'^api/', include(router.urls)),
]
這工作得很好,我可以去http://mysite/api看看「事件」有一個鏈接到http://mysite/api/events/。從那裏每個事件都有鏈接到http://mysite/api/events/id。到現在爲止還挺好。
如果我改變事件序列化,它也將包括所有從結果的結果(該事件):
class EventSerializer(serializers.HyperlinkedModelSerializer):
results = ResultSerializer(many=True, read_only=True)
class Meta:
model = Event
這也能正常工作。但我不希望每個活動都包含http://mysite/api/events(通常很長)的結果。有太多的方法。我只希望在去http://mysite/api/events/id時看到結果。
有關如何從我所在的位置到我想要的位置的任何提示?如果http://mysite/api/events上的每個項目都包含結果計數,那麼效果會更好,然後http://mysite/api/events/id實際上有結果。
希望這是有道理的。 謝謝。
這正是我一直在尋找的,很好,乾淨。謝謝! – user3449833
@ user3449833另外,爲了在列表請求的序列化表示中包含每個事件的'results'數量,你可以添加一個'result' [''SerializerMethodField()'](http://www.django-rest -framework.org/api-guide/fields/#serializermethodfield)在你的'EventSerializer'中。 –