如何根据需求从另一个模型中筛选Django模型



我想从我的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,以处理您的需求。

最新更新