Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何比较django中两个不同表的特定值?_Python_Django_Django Models - Fatal编程技术网

Python 如何比较django中两个不同表的特定值?

Python 如何比较django中两个不同表的特定值?,python,django,django-models,Python,Django,Django Models,我有两张“联系人”表,另一张是“订户”表。。我想比较两者的联系人id,只想显示联系人中存在但订户中不存在的联系人id。这两个表有两种不同的型号。类似的功能应该可以: Contact.objects.exclude( id__in=Subscriber.objects.all() ).values_list('id', flat=True) 请注意,这实际上是两个SQL查询。我相信有很多方法可以优化它,但这通常会很好 另外,values\u list与选择对象无关,它只是修改返回内容的“

我有两张“联系人”表,另一张是“订户”表。。我想比较两者的联系人id,只想显示联系人中存在但订户中不存在的联系人id。这两个表有两种不同的型号。

类似的功能应该可以:

Contact.objects.exclude(
    id__in=Subscriber.objects.all()
).values_list('id', flat=True)
请注意,这实际上是两个SQL查询。我相信有很多方法可以优化它,但这通常会很好

另外,
values\u list
与选择对象无关,它只是修改返回内容的“格式”(ID列表而不是对象查询集,但在这两种情况下都是相同的数据库记录)

如果您通过某个字段排除,而不是
Subscriber.id
(例如:
Subscriber.quasy\u id
):

编辑:

此答案假设您的
联系人
订户
型号之间没有关系。如果你这样做了,那么看看@navit的答案,这是一个更好的选择

编辑2:


实际上不需要
flat=True
内部
exclude

我假设您的模型是这样的:

class Subscriber(models.Model):
    contact = models.ForeignKey(Contact)
my_list = Subscriber.objects.filter(contact=None)
您可以这样做:

class Subscriber(models.Model):
    contact = models.ForeignKey(Contact)
my_list = Subscriber.objects.filter(contact=None)

这将检索没有联系人的订阅者。检索联系人列表很简单。

如果要比较两个不同表(与ForeignKey有连接)中字段的值,可以使用以下方法:

class Subscriber(models.Model):
    contact = models.ForeignKey(Contact)
my_list = Subscriber.objects.filter(contact=None)
我假设模型如下所示:

class Contact(models.Model):  
 name = models.TextField()
 family = models.TextField()

class Subscriber(models.Model):
 subscriber_name = models.ForeignKey(Contact, on_delete=models.CASCADE)
 subscriber_family = models.TextField()
这将是一个问题:

query = Subscriber.objects.filter(subscriber_name =F(Contact__name))
return query

是的,联系人和订户之间没有关系