我们的想法是建立这样一个模型:
class Object(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
name = models.CharField(max_length=256)
def __str__(self):
return self.name
然后创建一个序列化程序和一个与之相关ModelViewSet。
问题是ModelViewSet必须返回一个queryset,但由于一对一的关系,我希望使用单个对象。
我该如何继续?
1条答案
按热度按时间qyswt5oh1#
如文档中所述:
ModelViewSet
类继承自GenericAPIView
,并通过混合各种mixin类的行为来实现各种操作。这意味着
ModelViewSet
也会处理返回特定Object
的情况。如果你想要一个比实现的更复杂的行为,你甚至可以覆盖def get_object(self)
(参见SO question)。但是,为了确保只返回一个
Object
,我建议您使用一个字段作为唯一主键,您可以在插入时填充该字段(手动或自动),然后将其用作lookup_field
。下面,我假设您的
User
模型中也已经有了一个__str__(self)
函数。然后,您的
Object
模型将变为:您的序列化程序将是:
您的
ModelViewSet
将类似于:最后,要使整个过程正常工作,还必须在
urlpatterns
中注册ModelViewSet
。我使用显式地将我的
ViewSet
类绑定到一组具体的视图中,但这更多的是个人的选择,所以这取决于你。你可以查看相应的documentation以获得更多信息。在所有这些情况下,对
<BASE_URL>/objects/<YOUR_OBJECT_ID>
的请求应该只返回一个Object
结果。