【问题标题】:Concatenation foreign key in DjangoDjango中的连接外键
【发布时间】:2019-04-12 07:15:46
【问题描述】:

我需要一个查询来检索带有 concat 的 4 个模型类(P、B、M、C、Pt)的名称和 ID。

类 Pt 具有通过 id 指向父类的外键

预期的结果应该是这样的: Pt.name, Product.num , concat(B.name, M.name, V.name)

我尝试了几种方法,越相似就是这个

型号:

class B(models.Model):
    b_id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=100)


class M(models.Model):
    m_id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=100)


class V(models.Model):
    v_id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=100)


class Pt(models.Model):
    pt_id = models.AutoField(primary_key=True)
    name  = models.CharField(max_length=100)


class Product(models.Model):
    p_id = models.AutoField(primary_key=True)
    p_ref_fk = models.DecimalField(max_digits=5, decimal_places=2, null=True)
    pt_fk = models.ForeignKey(Pt, on_delete=models.CASCADE)
    b_fk = models.ForeignKey(B, on_delete=models.CASCADE)
    m_fk = models.ForeignKey(M, on_delete=models.CASCADE)
    v_fk = models.ForeignKey(V, on_delete=models.CASCADE)

查询:

# Get all the P related

    p = Product.objects.all().filter(pt_fk__pt_id=1116).filter(b_fk__b_id=3).filter(m_fk__m_id=53).filter(v_fk__v_id=352)

# check the query
print(p.query)

# get the results
print(p)

【问题讨论】:

    标签: python join foreign-keys concat


    【解决方案1】:

    根据我收到您的问题,您需要使用 - Pt.name, Product.num, concat(B.name, M.name, V.name) 来连接外键

    queryset = Employee.objects.annotate(fullname=Concat('first_name', 'last_name'))
    

    这是我自己的例子,请根据您的要求更改

    try this too

    【讨论】:

    • 是的,这是我需要做的。我是 Django 的新手,我正在尝试将项目转换为 Django。这是一个 mysql 查询,可以满足我的要求:mysql 上的类似查询 SELECT pt.name, product.price, CONCAT ('B:', b.name, ' M:', m.name, ' V:', v.name) FROM product INNER JOIN pt ON product.pt_fk = pt_id INNER JOIN b ON product.b_fk = b_id INNER JOIN m ON product.m_fk = m_id INNER JOIN v ON product.v_fk = v_id WHERE product.pt_fk = 2 AND product.b_fk = 84 AND product.m_fk = 4818 AND product.v_fk = 51
    猜你喜欢
    • 2017-07-31
    • 2013-11-04
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    • 2020-11-29
    • 2018-06-24
    • 2016-01-14
    • 1970-01-01
    相关资源
    最近更新 更多