返回所有未分配FK的Django queryset

2024-05-19 23:26:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有2个1-1关系模型(本质上是一个资源池)。对于示例代码,我将简单地使用螺母和螺栓。螺母(可用资源)比螺栓(每个螺栓需要1个螺母)多得多。但是,如果一个螺母只能指定给一个螺栓。在

约束很容易设置为ForeignKey方法的unique=True命名参数。在

问题来自于模型表单。呈现时,表单将在下拉列表中包含每个螺母。我想限制它只显示那些还没有被螺栓咬过的坚果。在

但我不能充分地意识到属性设置的问题。下面是我的问题的示例代码:

from django.db import models
from django.forms import ModelForm

# Create your models here.

class Nut(models.Model):
    size = models.CharField()

class Bolt(models.Model):
    size = models.CharField()
    nut = models.ForeignKey( Nut, unique=True )

class BoltForm(ModelForm):
    def __init__(self, *args, **kwargs):
        super(BoltForm, self).__init__(*args, **kwargs)
        self.fields['nut'].queryset = # All unassigned nuts

Tags: django代码from模型selftrue表单示例
2条回答
Nut.objects.filter(bolt=None)

试试这个:

self.fields['nut'].queryset = Nut.objects.exclude(
    pk__in=Bolt.objects.values('nut').query)

更新

生成同一sql查询的三个表达式:

^{pr2}$

我选择最后一个作为最直接的(尽管在另外两个例子中list和dict实际上并没有被创建:django“理解”了意图,没有明确提到.query

另外,考虑一下丹尼尔·罗斯曼的回答。这是做同样事情的另一种方法。在

相关问题 更多 >