django不同的表数据合并

时间:2018-05-31 09:42:19

标签: python django django-models django-orm

models.py 前)

tb2 = table2.objects.all().values("id","content","plus1","plus2","registerdate")
tb1 = table1.objects.all().annotate(plus1=Value('plus1', output_field=CharField()),plus2=Value('plus2', output_field=CharField())).values("id","content","plus1","plus2","registerdate")

我试过

plus1 = plus1 , plus2=plus2

merge = tb2.union(tb1)

tb2值是对的

但是tb 1字段很奇怪。

有时plus1 = plus2 , plus2=plus1 有时merge.count() merge.order_by("-registerdate")

我想要

FindCaller()

我可以获得一致的对齐字段

如果不是

我可以在没有工会的情况下获得数量和订单吗?

1 个答案:

答案 0 :(得分:1)

如果更改表格结构,则根本不会出现此问题。 请考虑以下事项:

table1(models.Model):
   id = primarykey
   content = textfield
   registerdate = datetimefield

table2(table1):
   plus1 = charfield
   plus2 = charfield

如果你使用它,你可以使用获得table1和table2的计数  table1.objects.count() 您也可以使用table2.objects.count()

获取table2的计数

您还可以使用OneToOne字段。这是一个例子:

table1(models.Model):
    id = primarykey
    content = textfield
    registerdate = datetimefield

table2(models.Model):
    id = primarykey
    table1 = models.OneToOne(table1)
    plus1 = charfield
    plus2 = charfield

现在你可以在table2上使用F对象进行注释,就像这样

from django.db.models import F
table2.objects.all().annotate(content=F('table1__content'), registerdate =F('table1__ registerdate'))