конкатенация внешнего ключа в Django - PullRequest
0 голосов
/ 12 апреля 2019

Мне нужен запрос для получения имени и идентификатора 4 классов модели (P, B, M, C, Pt) с помощью concat. Класс Pt имеет ForeignKey для родительского класса с идентификатором

Ожидаемый результат должен быть таким: 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)

1 Ответ

0 голосов
/ 12 апреля 2019

В соответствии с тем, как я получу ваш вопрос, вам нужно использовать Concat для иностранного ключа - Pt.name, Product.num, concat (B.name, M.name, V.name)

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

этомой собственный пример, пожалуйста, измените согласно вашим требованиям

попробуйте это тоже

...