如何比较两个彼此没有关系的不同模型中字段中的值

问题描述 投票:0回答:1

我有两个不同的模型,彼此没有关系,但继承自抽象模型,这两个模型有共同的电子邮件字段,我想检查此模型中包含的电子邮件值是否存在于另一个模型中。这是我的模特。

class BaseRespondent(SafeDeleteModel):
    _safedelete_policy = SOFT_DELETE_CASCADE

    class Meta:
    abstract = True

    id = models.UUIDField(primary_key=True, default=uuid.uuid4,     editable=False)
    name = models.CharField(max_length=256)
    email = models.EmailField()
    pos_applied = models.ForeignKey(PositionApplied, on_delete=_safedelete_policy,
                                null=True)
    date = models.DateField(auto_now_add=True)
    test = models.ForeignKey(Test, on_delete=models.SET_NULL, null=True, blank=True)

class Respondent(BaseRespondent):
    least_disc = models.CharField(max_length=256, default='')
    most_disc = models.CharField(max_length=256, default='')
    most_personality = models.ForeignKey(Personality, on_delete=models.SET_NULL,
                                     null=True, related_name="most_personality")
    least_personality = models.ForeignKey(Personality, on_delete=models.SET_NULL,
                                      null=True, related_name="least_personality")
    # combine = GenericRelation(Combined_Respondent, related_query_name='disc')

    def result(self):
        return format_html(
        '<a href="{0}result/{1}">View result</a>',
        settings.SITE_URL,
        self.id,
    )


    class Meta:

        verbose_name = "DISC Respondent"
        verbose_name_plural = "DISC Respondents"

class MBTIRespondent(BaseRespondent):
    first_col_component = models.CharField(max_length=32, null=True)
    first_col_score = models.CharField(max_length=32, null=True)

    third_col_component = models.CharField(max_length=32, null=True)
    third_col_score = models.CharField(max_length=32, null=True)

    fifth_col_component = models.CharField(max_length=32, null=True)
    fifth_col_score = models.CharField(max_length=32, null=True)

    seventh_col_component = models.CharField(max_length=32, null=True)
    seventh_col_score = models.CharField(max_length=32, null=True)

    personality = models.ForeignKey(MbtiPersonality, on_delete=models.SET_NULL,
                                null=True)
    # combine = GenericRelation(Combined_Respondent, related_query_name='mbti')

    def result(self):
        return format_html(
        '<a href="{0}result/mbti/{1}">View result</a>',
        settings.SITE_URL,
        self.id,
    )


    class Meta:

        verbose_name = "MBTI Respondent"
        verbose_name_plural = "MBTI Respondents"

我希望能够只显示Respondent和MBTIRespondent中存在的类似电子邮件

django django-models django-templates django-views
1个回答
0
投票

如果您想通过MBTIRespondent中的电子邮件获取所有受访者,您可以执行以下操作:

mtb_emails = MBTIRespondent.objects.values_list('email', flat=True)
respondent_with_mtb_emails = Respondent.objects.filter(email__in=mtb_emails)

另一种方法是连接两个表,但您必须使用connection.cursor()编写原始查询。

cursor = connection.cursor().
cursor.execute('''SELECT * from %s as r inner join %s as mr on r.email=mr.email''' % (Respondent._meta.db_table, MBTIRespondent._meta.db_table))
rows = cursor.fetchall()
© www.soinside.com 2019 - 2024. All rights reserved.