🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.python
7 messages
7 total messages Started by ds Mon, 08 Nov 2010 20:37
Znowy Django i znowu pewnie banał
#27784
Author: ds
Date: Mon, 08 Nov 2010 20:37
15 lines
1148 bytes
Mam dwie aplikacje w django, jedna przechowuje wpisy o pewnej strukturze, 
druga ma strukturę prawie bliźniaczą - z pewnych względów są to wydzielone 
modele danych. 

Chciałbym w widoku zapytać bazę o wpisy z tych dwu tabel i posortować je po 
np. dacie. Uda mi się to zrealizować na podobnej zasadzie jak: 

dane.objects.order_by('-date')[:10] ? 

Czy raczej muszę wyciągać na pomoc Q?


-- 
Pozdrawiam
ds
Re: Znowy Django i znowu pewnie banał
#27785
Author: Łukasz Rekucki
Date: Mon, 08 Nov 2010 21:38
28 lines
2188 bytes
On Nov 8, 9:37 pm, ds <ad...@email.pl> wrote:
> Mam dwie aplikacje w django, jedna przechowuje wpisy o pewnej strukturze,
> druga ma strukturę prawie bliźniaczą - z pewnych względów są to wydzielone
> modele danych.
>
> Chciałbym w widoku zapytać bazę o wpisy z tych dwu tabel

Co rozumiesz przez wpisy z "dwu tabel" (ew. dwóch tabel) ? Jeśli to są
różne modele (mają różne klasy), to nie możesz zrobić zapytanie, które
zwraca ich mieszankę.

> i posortować je po np. dacie. Uda mi się to zrealizować na podobnej zasadzie jak:
>
> dane.objects.order_by('-date')[:10] ?

Najłatwiej sprawdzić czy się uda, próbując i patrząc czy nie ma
błędów ? Albo napisać test jednostkowy do tej funkcjonalności, co jest
mocno zawsze zalecane :)

> Czy raczej muszę wyciągać na pomoc Q?

Q służy do konstruowania warunków logicznych, nie do końca wiem jak
może ci to pomóc w sortowaniu.

Z góry przepraszam jeśli brzmiało to trochę złośliwie.

Pozdrawiam,
Łukasz Rekucki
Re: Znowy Django i znowu pewnie banał
#27786
Author: ds
Date: Mon, 08 Nov 2010 22:07
28 lines
1663 bytes
Łukasz Rekucki wrote:

> Co rozumiesz przez wpisy z "dwu tabel" (ew. dwóch tabel) ? Jeśli to są
> różne modele (mają różne klasy), to nie możesz zrobić zapytanie, które
> zwraca ich mieszankę.
> 

No właśnie mam dwie klasy i dwie tabele - czyli muszę pobrać z obu 
oddzielnie i sobie posortować?

> Najłatwiej sprawdzić czy się uda, próbując i patrząc czy nie ma
> błędów ? Albo napisać test jednostkowy do tej funkcjonalności, co jest
> mocno zawsze zalecane :)
> 

Tego jeszcze nie macałem.

>> Czy raczej muszę wyciągać na pomoc Q?
> 
> Q służy do konstruowania warunków logicznych, nie do końca wiem jak
> może ci to pomóc w sortowaniu.

Pomyliło mi się, myślałem o własnym zapytaniu w stylu "SELECT FROM table1, 
table2 WHERE ... ORDER BY ..."

-- 
Pozdrawiam
ds
Re: Znowy Django i znowu pewnie banał
#27787
Author: Łukasz Rekucki
Date: Mon, 08 Nov 2010 23:05
30 lines
2502 bytes
On Nov 8, 11:07 pm, ds <ad...@email.pl> wrote:
> Łukasz Rekucki wrote:
> > Co rozumiesz przez wpisy z "dwu tabel" (ew. dwóch tabel) ? Jeśli to są
> > różne modele (mają różne klasy), to nie możesz zrobić zapytanie, które
> > zwraca ich mieszankę.
>
> No właśnie mam dwie klasy i dwie tabele - czyli muszę pobrać z obu
> oddzielnie i sobie posortować?

Tak musisz zrobić 2 zapytania, tak samo jak w SQL.

>
> > Najłatwiej sprawdzić czy się uda, próbując i patrząc czy nie ma
> > błędów ? Albo napisać test jednostkowy do tej funkcjonalności, co jest
> > mocno zawsze zalecane :)
>
> Tego jeszcze nie macałem.
>
> >> Czy raczej muszę wyciągać na pomoc Q?
>
> > Q służy do konstruowania warunków logicznych, nie do końca wiem jak
> > może ci to pomóc w sortowaniu.
>
> Pomyliło mi się, myślałem o własnym zapytaniu w stylu "SELECT FROM table1,
> table2 WHERE ... ORDER BY ..."

Ale takie zapytanie, nie wybiera elementów z dwóch tabel, tylko z ich
iloczynu kartezjańskiego. W SQL nie da się zrobić zapytania do dwóch
różnych tabel. Można użyć UNION, ale wtedy kolumny muszą się zgadzać,
więc jeśli tabele nie są identyczne, to będzie raczej ciężko.
Re: Znowy Django i znowu pewnie banał
#27789
Author: ds
Date: Mon, 08 Nov 2010 23:12
27 lines
1686 bytes
Łukasz Rekucki wrote:

> On Nov 8, 11:07 pm, ds <ad...@email.pl> wrote:
>> Łukasz Rekucki wrote:
>> > Co rozumiesz przez wpisy z "dwu tabel" (ew. dwóch tabel) ? Jeśli to są
>> > różne modele (mają różne klasy), to nie możesz zrobić zapytanie, które
>> > zwraca ich mieszankę.
>>
>> No właśnie mam dwie klasy i dwie tabele - czyli muszę pobrać z obu
>> oddzielnie i sobie posortować?
> 
> Tak musisz zrobić 2 zapytania, tak samo jak w SQL.
> 

Zrobiłem tak:

DATA1 i DATA2 to moje klasy

data = list(DATA1.objects.order_by('-date')[:15])
data.extend(list(DATA2.objects.order_by('-date')[:15]))
data.sort(key=operator.attrgetter('date'), reverse=True)

Potrzebowałem to do feeda. Dzięki za wskazówki

-- 
Pozdrawiam
ds
Re: Znowy Django i znowu pewnie banał
#27788
Author: zbrodel
Date: Tue, 09 Nov 2010 07:53
33 lines
2195 bytes
On 09.11.2010 00:12, ds wrote:
> Łukasz Rekucki wrote:
>
>> On Nov 8, 11:07 pm, ds<ad...@email.pl>  wrote:
>>> Łukasz Rekucki wrote:
>>>> Co rozumiesz przez wpisy z "dwu tabel" (ew. dwóch tabel) ? Jeśli to są
>>>> różne modele (mają różne klasy), to nie możesz zrobić zapytanie, które
>>>> zwraca ich mieszankę.
>>>
>>> No właśnie mam dwie klasy i dwie tabele - czyli muszę pobrać z obu
>>> oddzielnie i sobie posortować?
>>
>> Tak musisz zrobić 2 zapytania, tak samo jak w SQL.
>>
>
> Zrobiłem tak:
>
> DATA1 i DATA2 to moje klasy
>
> data = list(DATA1.objects.order_by('-date')[:15])
> data.extend(list(DATA2.objects.order_by('-date')[:15]))
> data.sort(key=operator.attrgetter('date'), reverse=True)
>
> Potrzebowałem to do feeda. Dzięki za wskazówki
>

Możesz napisać własnego managera (zastępującego domyślny manager objects 
albo będący dodatkowym managerem dla tego modelu, to już jak Ci 
wygodniej) i użyć w nim raw query. Ściągnięcie danych z dwóch tabel 
jednym selectem wykonasz operatorem UNION, tylko pamiętaj że domyślnie 
UNION z tego co pamiętam eliminuje duplikaty).

J.
Re: Znowy Django i znowu pewnie banał
#27790
Author: Przemek Miećkowski
Date: Tue, 09 Nov 2010 09:05
50 lines
3079 bytes
On 9 Lis, 08:53, zbro...@tlen.pl wrote:
> On 09.11.2010 00:12, ds wrote:
>
>
>
>
>
>
>
>
>
> > Łukasz Rekucki wrote:
>
> >> On Nov 8, 11:07 pm, ds<ad...@email.pl>  wrote:
> >>> Łukasz Rekucki wrote:
> >>>> Co rozumiesz przez wpisy z "dwu tabel" (ew. dwóch tabel) ? Jeśli to są
> >>>> różne modele (mają różne klasy), to nie możesz zrobić zapytanie, które
> >>>> zwraca ich mieszankę.
>
> >>> No właśnie mam dwie klasy i dwie tabele - czyli muszę pobrać z obu
> >>> oddzielnie i sobie posortować?
>
> >> Tak musisz zrobić 2 zapytania, tak samo jak w SQL.
>
> > Zrobiłem tak:
>
> > DATA1 i DATA2 to moje klasy
>
> > data = list(DATA1.objects.order_by('-date')[:15])
> > data.extend(list(DATA2.objects.order_by('-date')[:15]))
> > data.sort(key=operator.attrgetter('date'), reverse=True)
>
> > Potrzebowałem to do feeda. Dzięki za wskazówki
>
> Możesz napisać własnego managera (zastępującego domyślny manager objects
> albo będący dodatkowym managerem dla tego modelu, to już jak Ci
> wygodniej) i użyć w nim raw query. Ściągnięcie danych z dwóch tabel
> jednym selectem wykonasz operatorem UNION, tylko pamiętaj że domyślnie
> UNION z tego co pamiętam eliminuje duplikaty).
>
> J.

W celu eliminacji duplikatów w UNION można w obu selectach użyć:
1 as `my_unique`
0 as `my unique`,

także każde zapytanie będzie miało inną wartość my_unique.

Ten sposób pozwala też na budowanie UNION, gdy w jeden tabeli brak
jakiegoś pola z drugiej tabeli.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads