我很难弄清楚这一点。我有两个自定义用户模型(例如:Buyer、Seller),它扩展了一个自定义用户模型(CustomUser),它包含所有常见字段(包括email
我们需要使用哪些字段来过滤内容)并且是一个abstract
模型。
现在,我们正在使用第三方电子邮件服务从/向我们的应用程序发送和接收电子邮件。第三方服务会通知我们某个事件。比如说,如果一封电子邮件被退回或失败,他们会在 url 上向我们发送一个 POST 请求callback
,在验证请求后,我们会更新我们的记录并记下哪封电子邮件失败了。
我们有一个额外的电子邮件模型(SentMessage),我们在其中保存已发送的消息。这个模型看起来像这样。
class SentMessage(models.Model):
subject = models.CharField(max_length=100)
body = models.TextField()
sender = models.ForeignKey(models.InternalUser)
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
recipient = generic.GenericForeignKey('content_type', 'object_id')
bounced = models.BooleanField(default=False)
如您所见,recipient
上述模型中的字段是 aGenericForeignKey
并且可以绑定到任何其他模型(在我们的例子中为买方或卖方)。如果消息在退回事件等中被退回,我们将在此模型中更新记录。我希望使用第三方服务提供的电子邮件地址过滤掉收件人。所以基本上流程是这样的。
--> 使用给定的电子邮件地址过滤收件人。(收件人可以是买家或卖家)--> 使用上述内容,SentMessage
根据事件类型过滤退回或失败的邮件。
我被困在这里的第一点。如何过滤Buyer
模型或Seller
模型中存在的对象。我什至不能执行以下操作,因为CustomUser
类是一个抽象类,两者都Buyer
继承Seller
自:
recipient = models.CustomUser.objects.get(email=bounced_email)
从给定的电子邮件地址中查找(过滤)出content_type
,object_id
的最佳方法是什么?recipient