나는이 것을 고치기가 힘듭니다. 모든 공통 필드 (예 : email
을 사용하여 항목을 필터링해야 함)를 보유하는 단일 사용자 정의 사용자 모델 (CustomUser)을 확장하고 abstract
모델 인 두 개의 사용자 정의 사용자 모델 (예 : Buyer, Seller)이 있습니다.django에서 GenericForeignKey로 복잡한 필터링
이제 타사 이메일 서비스를 사용하여 Google 애플리케이션과 이메일 메시지를주고받습니다. 제 3 자 서비스는 이벤트에 관해 우리에게 알려줍니다. 예를 들어 이메일이 반송되거나 실패하면 callback
url에 POST 요청을 보내고 요청을 인증 한 후 Google에서 기록을 업데이트하고 실패한 이메일을 기록합니다.
전송 된 메시지를 저장하는 추가 전자 메일 모델 (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
필드는 GenericForeignKey
이며, (우리의 경우 구매자 또는 판매자에) 다른 모델에 바인딩 할 수 있습니다. 이 모델은 바운스 이벤트 등에서 메일이 수신되면 레코드를 업데이트 할 모델입니다. 제 3 자 서비스에서 제공 한 이메일 주소로 수신자를 필터링하려고합니다. 그래서 기본적으로 흐름은 비슷한 것입니다.
-> 주어진 이메일 주소를 사용하여 수신자를 필터링하십시오 (수신자가 구매자 또는 판매자 일 수 있음) -> 위의 내용을 사용하여 이벤트 유형에 따라 반송되거나 실패한 필터 SentMessage
.
나는 여기서 첫 번째 지점에 머물러있다. Buyer
모델 또는 Seller
모델에있는 개체를 필터링하려면 어떻게해야합니까? CustomUser
클래스는 추상 클래스는, 그대로 난 다음 작업을 수행 할 수없는 두 Buyer
및 Seller
상속 :
recipient = models.CustomUser.objects.get(email=bounced_email)
A로부터 찾을 수있는 가장 좋은 방법 (필터) 밖으로 content_type
, object_id
, recipient
이 될 것입니다 무엇 주어진 이메일 주소?
여기 가야 할 곳은 https://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/입니다. 먼저 content_type 클래스를 가져온 다음 object_id – n3storm