首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何比较两个互不相关的distict模型中字段中的值

如何比较两个互不相关的distict模型中字段中的值
EN

Stack Overflow用户
提问于 2019-02-11 22:33:42
回答 1查看 23关注 0票数 0

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

代码语言:javascript
复制
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"

我希望能够仅显示在答复者和MBTIRespondent中都存在的类似电子邮件

EN

回答 1

Stack Overflow用户

发布于 2019-02-11 22:42:34

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

代码语言:javascript
复制
mtb_emails = MBTIRespondent.objects.values_list('email', flat=True)
respondent_with_mtb_emails = Respondent.objects.filter(email__in=mtb_emails)

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

代码语言:javascript
复制
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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54632847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档