我有很多汽车品牌但没有那么多汽车。我只需要购买有汽车的汽车品牌。
问题是如何在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
答案 0 :(得分: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
没有任何方法可以告诉哪些车型属于哪些汽车品牌,没有办法执行这样的行动。如果这个逻辑到位,请随意添加问题。