2016-06-30 74 views
0

我有很多汽車品牌,但沒有那麼多的汽車。我只需要獲得只有汽車的汽車品牌。獲取同型號車型的模型對象

問題是如何在CarForRent模型中調用CarForRent.objects.all()?

這裏是我正在努力做到這一點:

 # -*- coding: utf-8 -*- 
     from __future__ import unicode_literals 
     from django.contrib.auth.models import User 
     from django.db import models 

     from information.models import CarBrand, CarModel, City 


     class CarForRent(models.Model): 
      owner = models.ForeignKey(User) 
      brand = models.ForeignKey(CarBrand) 
      model = models.ForeignKey(CarModel) 
      years = models.CharField(max_length=4, choices=CAR_YEAR_CHOICES) 
      consumption = models.DecimalField(max_digits=5, decimal_places=2, blank=True) 
      body_type = models.CharField(max_length=21, choices=BODY_TYPE_CHOICES) 
      fuel_type = models.CharField(max_length=21, choices=FUEL_TYPE_CHOICES) 
      transmission_type = models.CharField(max_length=4, choices=TRANSMISSION_TYPE_CHOICES) 
      doors = models.CharField(max_length=4, choices=DOOR_TYPE_CHOICES) 
      air_conditioner = models.BooleanField(default=True) 

      def get_active_car_brands(self): 
       brands = [] 
       active_brands = [] 
    ----------> for car in CarForRent.objects.all(): <--------- problem 
        brands.append(car.brand) 
       for brand in brands: 
        active_brands.append(CarBrand.objects.get(id=brand)) 
       return active_brands 

回答

1

這是通常會在形式層面需要解決的問題。

現在最大的障礙是沒有邏輯顯示哪些車型屬於哪個汽車品牌。 Django Smart Selects通常用於提供嵌套的外鍵關係。

如果設置正確,並且存在與品牌相關的CarModel模型,我們可以輕鬆覆蓋提供給品牌模型的查詢集。以通用的ModelForm爲例;我們將設置查詢集爲一個覆蓋方法__init__

from django import forms 
from myapp.models import CarsForRent 

class CarsForRentForm(forms.ModelForm): 
    model = CarsForRent 
    exclude = [] # or pass a list/tuple of field name string in a 'fields' parameter 
    def __init__(self, *args, **kwargs): 
     super(CarsForRentForm, self).__init__(*args, **kwargs) 
     # access object through self.instance... 
     self.fields['brand'].queryset = CarBrand.objects.filter(model__set__count__gt=0) # model__set represents the related_name parameter providen for CarModel's FK relation to CarBrand 

沒有看到任何方式告訴哪些車型屬於哪個汽車品牌,也沒有辦法進行這樣的操作。如果這個邏輯已經到位,請隨意添加。