如何根据另一个模型的需求过滤Django模型?
我想从我的如何根据另一个模型的需求过滤Django模型?,django,django-models,django-views,Django,Django Models,Django Views,我想从我的联系人模型中检索我的所有联系人,不包括我的DoNotContact模型中列出的联系人。以下是最有效的方法:contacts=Contact.objects.filter(dont_Contact=False)如果这需要很长时间才能处理,有没有更有效的方法 class Contact(models.Model): email = models.CharField(max_length=12) first_name = models.CharField(max_length
联系人
模型中检索我的所有联系人,不包括我的DoNotContact
模型中列出的联系人。以下是最有效的方法:contacts=Contact.objects.filter(dont_Contact=False)
如果这需要很长时间才能处理,有没有更有效的方法
class Contact(models.Model):
email = models.CharField(max_length=12)
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
audience = models.ForeignKey(Audience, on_delete=models.CASCADE)
def dont_contact(self):
try:
get_object_or_404(DoNotContact, email=self.email)
return True
except:
return False
def __str__(self):
return self.email
class DoNotContact(models.Model):
email = models.CharField(max_length=12)
#views.py
def send_email(request):
if request.method == "POST":
contacts = Contact.objects.filter(dont_contact=False)
Kwargs使用的模型查询集过滤方法被解析为数据库列
dont\u contact
这里有一个方法,并且在contact
模型中不作为列存在,因此调用contact.objects.filter(dont\u contact=False)
将引发字段错误
对于模型的当前实现,您可以执行以下操作
dont_contacts = DoNotContact.objects.values('email')
contacts = Contact.objects.exclude(email__in=dont_contacts)
具有更高性能的更好解决方案是删除DoNotContact
,并在Contact
中添加一个BooleanField
来处理您的需求。由于与我的应用程序相关的某些原因,我无法在Contact
中设置与联系人相关的布尔字段。在您推荐的调整下,我当前实现的性能会有多低?在我看来,它不会转化为瓶颈。在本例中,如果我们使用BooleanField
,将执行两个查询,而不是一个查询。我不明白您的意思。你的意思是如果我保留两种型号的DoNotContact
和Contact
就可以了,而且不会对性能产生太大影响吗?是的!如果保留这两种型号,将不会有相当大的性能变化。