Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从Django/DRF中的公共视图中提取特定模型的标准方法?_Python_Django_Django Rest Framework - Fatal编程技术网

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

Python 从Django/DRF中的公共视图中提取特定模型的标准方法?,python,django,django-rest-framework,Python,Django,Django Rest Framework,我目前有两个基本相同的模型(从基础模型继承),但从通用视图引用它们时遇到问题: 型号: class BaseModel(models.Model): name = models.CharField(...) owner = ForeignKey(...) class Cat(BaseModel): ... class Dog(BaseModel): ... class CommonViewset(viewsets.ModelViewSet): @li

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

型号:

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 = ...
查看:

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\u owner
链接放在不同的视图中,但这感觉很不干燥。提前感谢您的关注

您可以传递模型以在类的
as\u view
方法中使用:

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

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

谢谢!我正在使用路由器,因此模型将设置在视图集中。