【发布时间】:2018-09-05 14:02:04
【问题描述】:
假设我有三个模型:
class User(AppModel):
name = models.CharField(max_length=255)
class Business(AppModel):
owner = models.ForeignKey("User", related_name="businesses", on_delete=models.CASCADE)
legal_name = models.CharField(max_length=255)
class Invoice(AppModel):
business = models.ForeignKey("Business", related_name="invoices", on_delete=models.CASCADE)
amount = models.integerField()
如您所见,一个user 可以有多个businesses,一个business 可以有多个invoices。
我的 serializers.py:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields= ('name')
class BusinessSerializer(serializers.ModelSerializer):
owner = UserSerializer(many=False)
class Meta:
model = Business
fields= ('owner','legal_name')
class InvoiceSerializer(serializers.ModelSerializer):
business= BusinessSerializer(many=False)
class Meta:
model = Invoice
fields= ('business','amount')
views.py:
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
class BusinessViewSet(viewsets.ModelViewSet):
queryset = Business.objects.all()
serializer_class = BusinessSerializer
class InvoiceViewSet(viewsets.ModelViewSet):
queryset = Invoice.objects.all()
serializer_class = InvoiceSerializer
urls.py:
router = DefaultRouter()
router.register('user', UserViewSet, base_name='users')
router.register('business', BusinessViewSet, base_name='businesses')
router.register('invoice', InvoiceViewSet, base_name='invoices')
urlpatterns = router.urls
http://example.com/api/user 返回所有用户。没问题。
但我正在寻找的功能是:
-
http://example.com/api/business/返回[ { "legal_name": "1business", "owner": 1, }, { "legal_name": "2business", "owner": 1, },] -
http://example.com/api/business/1/返回{ "legal_name": "1business", "owner": 1, }
以上都可以。但我也需要:
-
http://example.com/api/business/1/invoices/应该返回[ { "business": 1, "amount": 100, }, { "business": 1, "amount": 999, },]
我也应该能够在那里创建更新删除那些发票。
有什么帮助吗?我是 django rest 框架的新手。上述类只是一个示例。忽略错误。
【问题讨论】:
标签: python django django-models django-rest-framework django-views