2014-06-27 43 views
0

我現在有兩個模型在本質上是相同的(從基礎模型繼承),但我指的是他們的問題,從一個共同的看法:標準方法從Django/DRF中的通用視圖中提取特定模型?

型號:

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

您可以通過模型類的as_view方法使用方法:

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

ModelViewSet類從Django的View類繼承,所以這將設置你的視圖集的實例model屬性。然後,您可以使用self.model獲取當前網址的正確模型。

+0

謝謝!我正在使用路由器,因此模型將在Viewset中設置。 – WBC

相關問題