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ł
Author: ds
Date: Mon, 08 Nov 2010 20:37
Date: Mon, 08 Nov 2010 20:37
15 lines
1148 bytes
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ł
Author: Łukasz Rekucki
Date: Mon, 08 Nov 2010 21:38
Date: Mon, 08 Nov 2010 21:38
28 lines
2188 bytes
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ł
Author: ds
Date: Mon, 08 Nov 2010 22:07
Date: Mon, 08 Nov 2010 22:07
28 lines
1663 bytes
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ł
Author: Łukasz Rekucki
Date: Mon, 08 Nov 2010 23:05
Date: Mon, 08 Nov 2010 23:05
30 lines
2502 bytes
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ł
Author: ds
Date: Mon, 08 Nov 2010 23:12
Date: Mon, 08 Nov 2010 23:12
27 lines
1686 bytes
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ł
Author: zbrodel
Date: Tue, 09 Nov 2010 07:53
Date: Tue, 09 Nov 2010 07:53
33 lines
2195 bytes
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ł
Author: Przemek Miećkowski
Date: Tue, 09 Nov 2010 09:05
Date: Tue, 09 Nov 2010 09:05
50 lines
3079 bytes
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