Django在为null时过滤ForeignKey字段

时间:2016-07-28 16:27:20

标签: django foreign-keys nullable

假设我在Django中有两个表,<asp:TextBox ID="textBox1" runat="server" /> <asp:LinkButton ID="link1" runat="server" Text="Button1" /> <asp:LinkButton ID="link2" runat="server" Text="Button2" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script> <script type="text/javascript"> $(function() { $("#<%= textBox1.ClientID %>").blur(function () { if ($(this).val() === "X") { $("#<%= link1.ClientID %>").hide(); $("#<%= link2.ClientID %>").hide(); } }); }) </script> TableA。表A包含一些布尔字段TableB,而bool包含一个外键字段TableBfor_field,可以为空。

TableA

如果我想过滤TableB以获得class TableA(models.Model): bool = models.BooleanField() class TableB(models.Model): for_field = models.ForeignKey('TableA', null=True) for_field.boolTruefor_field的所有条目,那么实现此目的的最短方法是什么?

我正在使用Null,但我想知道是否有更短的代码。

2 个答案:

答案 0 :(得分:6)

经过一些实验后,.exclude(for_field__bool=False)似乎还会包含for_field__isnull=True条目,并且不会引发任何异常。您可以通过执行.exclude(for_field__bool=False).filter(for_field__isnull=True)并查看一些结果来确定。

老实说,我不知道哪个选项更快,但IMO你的两个Q对象的变体更具可读性,因为它显示了你真正想要的逻辑。所以我实际上建议你坚持下去。

答案 1 :(得分:2)

我很确定,你的选择是最短的(如果我错了,请纠正我)。那是因为没有Q对象你不能进行OR查询。