2016-06-30 9 views
0

私は多くの自動車ブランドを持っていましたが、それほど多くの車は持っていませんでした。私は車を持っている車のブランドだけを取得する必要があります。同じモデルのモデルでモデルオブジェクトを取得

問題はCarForRent.objects.all()をCarForRentモデルで呼び出す方法ですか?ここで

は、私はこれをやろうとしている方法です:

 # -*- 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 

モデルがブランドをどの車に属している車伝えるためにどのような方法を見ずに、このようなアクションを実行する方法はありません。この論理があれば自由に質問に追加してください。

関連する問題