gpt4 book ai didi

python - 返回所有未分配的 fks 的 Django 查询集

转载 作者:行者123 更新时间:2023-11-28 22:07:23 25 4
gpt4 key购买 nike

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

使用 ForeignKey 方法的 unique=True 命名参数可以很容易地设置约束。

问题出在 ModelForm 上。呈现时,表单将包含下拉列表中的每个 螺母。我想将其限制为仅显示尚未被 bolt 占用的螺母。

我知道 ModelForm 类的 fields 属性,但无法提出充分解决该问题的查询集过滤器。这是我的问题的示例代码:

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

最佳答案

试试这个:

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

更新:

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

pk__in=Bolt.objects.values('nut')
pk__in=Bolt.objects.values_list('nut')
pk__in=Bolt.objects.values('nut').query

我会选择最后一个作为最直接的(尽管在其他两种情况下,列表和字典实际上并未创建:django ‘理解’意图而无需明确提及 .query)

另外,请考虑 Daniel Roseman 的回答。这是做同样事情的另一种方法。

关于python - 返回所有未分配的 fks 的 Django 查询集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2104921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com