【发布时间】:2018-01-04 11:06:32
【问题描述】:
我有两个模型:Library 和 Book。一个图书馆会有很多书。
class Library(models.Model):
library_id = models.AutoField(primary_key=True)
name = models.CharField(max_length=30)
city = models.CharField(max_length=30)
address = models.CharField(max_length=80)
phone = models.CharField(max_length=30, blank=True, null=True)
website = models.CharField(max_length=60, blank=True, null=True)
class Book(models.Model):
book_id = models.AutoField(primary_key=True)
title = models.CharField(max_length=30)
# A library has many books
which_library = models.ForeignKey('Library', related_name='books', on_delete=models.CASCADE)
reader = models.ManyToManyField('Reader', related_name='wishlist')
我的序列化器:
class LibrarySerializer(serializers.ModelSerializer):
class Meta:
model = Library
fields = '__all__'
class BookSerializer(serializers.ModelSerializer):
wishlist = ReaderSerializer(many=True, read_only=True)
class Meta:
model = Book
fields = '__all__'
我的看法:
class LibraryViewSet(viewsets.ModelViewSet):
queryset = Library.objects.all()
serializer_class = LibrarySerializer
class BookViewSet(viewsets.ModelViewSet):
queryset = Book.objects.filter(which_library=library_id)
serializer_class = BookSerializer
我的网址:
router = routers.DefaultRouter()
router.register(r'libraries', LibraryViewSet)
router.register(r'books/(?P<library_id>[0-9]+)', BookViewSet)
urlpatterns = router.urls
我的图书馆路线工作正常。但是对于书籍,我需要归还仅属于特定图书馆的书籍。默认 URL 和 all() 返回数据库中的所有书籍,并且可以通过点击 books/1 检索单个书籍。
我怎样才能做到这一点?我以前可以这样做:
@api_view(['GET', 'POST'])
def books(request, library_id):
但现在我想用 ModelViewSet 来做。
【问题讨论】:
-
任意过滤的更一般的答案在这里:stackoverflow.com/questions/46323417/…
标签: django django-rest-framework