从Django / DRF中的公共视图中提取特定模型的标准方法?

时间:2014-06-27 17:29:45

标签: python django django-rest-framework

我目前有两个基本相同的模型(继承自基础模型),但我从一个常见的视图中引用它们时遇到了问题:

型号:

class BaseModel(models.Model):
    name = models.CharField(...)
    owner = ForeignKey(...)

class Cat(BaseModel):
    ...

class Dog(BaseModel):
    ...

查看:

class CommonViewset(viewsets.ModelViewSet):
    @link()
    def set_owner(self, request, pk=None):

        #how do I get Cat or Dog models cleanly here?

        #super fugly/unstable way
        url_path = request.META['PATH_INFO']
        if 'cats' in url_path:
            Cat.objects.get(pk=pk).owner = ...
        elif 'dogs' in url_path:
            Dog.objects.get(pk=pk).owner = ...

我也可以将set_owner链接放在不同的视图中,但感觉不干。在此先感谢您对此进行调查!

1 个答案:

答案 0 :(得分:1)

您可以传递模型以在您班级的as_view方法中使用:

url(r'^cats/my-url/$', CommonViewSet.as_view(model=Cat)),

ModelViewSet类继承自Django的View类,因此这将在视图集的实例上设置model属性。然后,您可以使用self.model为当前网址获取正确的模型。