Django разные таблицы слияния данных - PullRequest
0 голосов
/ 31 мая 2018

models.py ex)

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

table2(models.Model):
   id = primarykey
   content = textfield
   plus1 = charfield
   plus2 = charfield
   registerdate = datetimefield

Я пытался

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")

merge = tb2.union (tb1)

значения tb2 верны

но поля tb 1 странные.

несколько раз plus1 = plus1 , plus2=plus2 несколько раз plus1 = plus2 , plus2=plus1

Я хочу

merge.count()
merge.order_by("-registerdate")

можно ли получить согласованное выровненное поле

если нет

Я могу получить счет и заказ без объединения?

1 Ответ

0 голосов
/ 03 июня 2018

Если вы измените структуру таблиц, у вас вообще не возникнет этой проблемы.Примите во внимание следующее:

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

table2(table1):
   plus1 = charfield
   plus2 = charfield

Если вы пойдете с этим, вы можете получить счет таблицы 1 и таблицы 2, используя table1.objects.count(), вы также можете получить счет таблицы 2 только с помощью table2.objects.count()

Вы также можете использоватьOneToOne полей.Вот пример:

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

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

, и теперь вы можете пометить F объектами на table2, как это

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