2015-10-18 25 views
0

我無法理解,以顯示特定視圖顯示視圖,與Django的

最好的方法有兩個過濾模型相關鍵我有兩個模型是這樣的:

// models.py 
class CarDealer(model.Models): 
    name = model.TextField() 
    slug = model.SlugField() 

class Car(model.Models): 
    name = model.TextField() 
    color = model.TextField() 
    dealer = model.ForeignKey('CarDealer', related_name'cars') 

和網址我試圖構建的是:

// url.py 
url(regex=r'^(?P<car_dealer_slug>[^/]*)/(?P<car_color_one>[^/]*)/(?P<car_color_two>[^/]*)/$', 
    view=views.DealerCarColors.as_view(), 
    name='dealer_car_colors') 

所以URL可以是/經銷商/藍/綠,我想顯示的經銷商名單,藍色汽車的清單和綠色汽車他們有,或列表沒有車的秒。

我想視圖中顯示的表:

|dealer | color 1| color 2| 
--------------------------- 
|dealer1| car A | car Z | 
|  | car B | car X | 
|  | car C |  | 
--------------------------- 
|dealer2|  |  | 
--------------------------- 

我想了解如何使用基於類的意見,允許CarDealers的尋呼做到這一點,但仍然能夠顯示兩個相關對象的過濾列表。

我知道這是可能的幾種方式,但什麼是最正確的方式?即保留view.py文件中的所有邏輯,而不是使用過濾器。

+1

避免產生這種複雜的URL,過濾器/搜索參數而應是在獲取數據,如顏色=綠色和顏色? =藍色。對於我來說,顯示多個經銷商的汽車是沒有意義的,因爲/ car_dealer_slug /應該對於只有一個經銷商是唯一的。 –

+0

對不起,我還不能編輯我的帖子,但我想在URL中刪除經銷商。 –

+0

雖然參數在GET數據中,但仍然存在相同的問題,即構建模型數據的最佳做法是什麼。 –

回答

0

你應該真正整理你的網址並首先考慮它。如果用戶想要訪問的顏色綠色的汽車,那麼他會去

/dealer/green 

,如果他想藍,他會去

/dealer/blue 

如果他想車顏色爲綠色和汽車藍色,他會去上面的每個網址。爲什麼你最終希望他在一個網址中混合使用,無論如何你都會顯示兩個單獨的汽車列表?該視圖將是這個樣子:以上

class GetCars(APIView): # I'm using DRF so I'm extending a DRF view 
    """ 
    List the cars based on the users filters. 
    """ 

    def get(self, request, dealer, colorOne, colorTwo): 
     cars = CarDealer.objects.filter(name=dealer, cars.color = colorOne) # Django code 
     carsTwo = CarDealer.objects.filter(name=dealer, cars.color = colorTwo) # Django Code 
     # then return both cars and carsTwo to the front-end 

代碼使用DRF(我使用的是DRF的APIView),但唯一的,Django的視圖將使用類似的邏輯。

編輯:另外,您的文章說:

「所以,此網址會/經銷商/藍/綠,我想顯示經銷商的名單和藍色汽車的清單和綠色汽車他們有,或。沒有汽車的名單

我想視圖中顯示的表:」

|dealer | color 1| color 2| 
--------------------------- 
|dealer1| car A | car Z | 
|  | car B | car X | 
|  | car C |  | 
--------------------------- 
|dealer2|  |  | 
--------------------------- 

你真的不應該顯示dealer2如果用戶專門跑到URL /經銷商/色彩(因爲這意味着他想看到那個特定經銷商的汽車)。

編輯:如果你想多車的對象,而不是CarDealer對象,你可以嘗試:

def get(self, request, dealer, colorOne, colorTwo): 
     dealerObject = CarDealer.objects.get(name=dealer) 
     cars = Car.objects.filter(dealer=dealerObject, color=colorOne) 
+0

這是關於URL的問題,但更多關於如何構建視圖Django的方式。我無法編輯原始問題,但它更像/ dealers /?color = green&color = blue。因此,我希望以上表的格式查看每個經銷商的數據。 –

+1

@CodingMonkey哦,對不起。我想我錯誤地解釋了「什麼是最正確的方式」。儘管如此,您可能最終會在您的視圖中使用「cars = CarDealer.objects.filter(name = dealer,cars.color = colorOne)」,所以我會留下答案,直到其他人有更好的方式。 – user2719875

+0

我試過像'qs = CarDealer.objects.filter(cars_color = colorOne)'這樣的查詢集合,但是有些如何返回多個CarDealer對象,每個結果對應cars_color一個。 –