Musiałem niedawno rozbudować pewien portal w ten sposób, że miały pojawić się w nim strony z informacjami z różnych regionów, czyli inaczej mówiąc kilkanaście serwisów newsowych w jednym. Dodatkowo wymagana była taka funkcjonalność, że wybrane wpisy miały trafiać na stronę główną. To oznaczało, że wszystkie newsy powinny być w jednej tabeli, co w Django oznacza, że w jednym modelu.
Rzecz wydawała mi się najpierw banalna.
Każdy news będzie miał informację o regionie, a dodatkowo można będzie zaznaczyć flagę "strona główna" i gotowe!
Kiedy jednak usiadłem z zamiarem zrobienia tego w pół godziny, zaczęło się komplikować. No bo jak przydzielić uprawnienia autorom? Aplikacja wykorzystuje panel administracyjny Django. Autor z województwa śląskiego nie powinien oczywiście mieć uprawnień do wpisów z województwa pomorskiego i odwrotnie. To też nie wydawało się wielkim problemem, bowiem już wcześniej Snatch333 podsunął mi świetny tekst na ten temat.
Jednakże męczyłem się nad wymyśleniem mechanizmu, który na podstawie zalogowanego autora będzie decydował do jakiego regionu przypisać dany post. Autorów w danym województwie może być kilku, czyli mamy relacje jeden region do wielu userów. User musiałby mieć zatem pole ForeignKey, ale user jest w Django predefiniowany i nic z tym zrobić nie można. No dobrze, ale od czego są relacje 1:1? Utworzyłem więc każdemu userowi profil powiązany z nim relacją 1:1, profil ma ForeignKey do Region.
No i teraz trzeba wyświetlić na stronie wiadomości z danego regionu. Wiadomość ma autora. Autor ma profil. Profil ma region i jeśli ten region ma dany id to wiadomość wyświetlamy... Nad tym się własnie męczyłem przekładając robotę z dnia na dzień. Znałem metodę filter, ale tylko w je podstawowej postaci np. News.objects.filter(published=True), ale jak to robić w relacjach i to jeszcze piętrowych. No dobrze, pewnie da się to zrobić w SQL-u. Poszedłem spać i sniły mi się SELECT author FROM news CROSS JOIN coś tam...
Rano tak od niechcenia zaglądam do dokumentacji Django ;)
Coooo??? Nie, to niemożliwe...
Zaraz...
Piszę ./manage.py shell
i w shellu:
from django.contrib.auth.models import User from news.models import * News.objects.filter(author__profile__region__name="mazowieckie")
Odpowiedzi
title=respond this post
I think that there's no reason to compose the expository essay by your own efforts! In fact, that will be better to order the critical essay at sociology essay service, just because it will save time and money.
Thank you for your opinion.
Thank you for your opinion.