我想从我的Contact
模型中检索我的所有联系人,但不包括在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_contact
是一个方法,在Contact
模型中不作为列存在,因此调用Contact.objects.filter(dont_contact=False)
将引发一个FieldError
。
对于您的模型的当前实施,您可以执行以下
dont_contacts = DoNotContact.objects.values('email')
contacts = Contact.objects.exclude(email__in=dont_contacts)
具有更高性能的更好解决方案是删除DoNotContact
,并在Contact
中添加一个BooleanField
,以处理您的需求。