过滤ForeignKey的可能选择

时间:2012-08-14 17:20:01

标签: django-models django-forms

欢迎,

我在限制与ForeignKey相关的选择时遇到了一些问题。下面我附上我的代码片段( models.py ):

class Car(models.Model):
    name = models.CharField(max_length=50)
    ....

class Driver(models.Model):
    name = models.CharField(max_length=50)
    car = models.ForeignKey(Car)
    ....

class CarForm(ModelForm):
    class Meta:
        model = Car

class DriverForm(ModelForm):
    def __init__(self, *args, **kwargs):
        super (DriverForm,self).__init__(*args, **kwargs)
        self.fileds['car'].queryset = Car.objects.filter(???_1_???)    
    class Meta:
        model = Driver

有人可以给我一些建议应该如何定义??? 1 ???将可用的Car对象仅限于那些未分配给任何Driver的

1 个答案:

答案 0 :(得分:1)

首先,如果每个Car可以,您可以考虑将DriverForeignKey之间的关系更改为OneToOneField而不是Car总是只有一个Driver

但是,如果您只想限制表单中的选项,那么您的查询集必须类似于:

from django.db.models import Count
self.fields['car'].queryset = Car.objects.annotate(num_drivers=Count('driver')).filter(num_drivers=0)