Django subclass filters

31 views
Skip to first unread message

Dražen Odobašić

unread,
Apr 25, 2013, 9:09:03 AM4/25/13
to pyth...@googlegroups.com
Pozdrav ekipa,

imam sljedeći problem, trebam na neki način filtrirati podklase tako da se u
svakoj podklasi postavi filter specifičan za tu podklasu. Primjer aplikacije s
testom, tj. ono što sam pokušao posložiti je na
https://dl.dropboxusercontent.com/u/7897514/example_proj.zip

Znam da je ovo puno lakše riješiti tako da 'name' prebacim u House objekt,
ali... to nije moguće primijeniti za stvarni problem.

Dakle, imam nekoliko tablica s prostornim objektima(točke) koje se uređuju kroz
QGIS, ima nekoliko tablica koje se ažuriraju na dnevnoj bazi (import podataka) i
nekoliko 'stvarnih' modela koji se hendlaju kroz Django. Veza između 'master'
tablice i svih ostalih tablica će biti 'uuid' polje. Trebam odabrati sve
'master' podatke za točke koje se nalaze na nekom interesnom području.

Filter je trenutno trivijalan,
.filter(neki_atribut_s_geometrijom__within=neko_interesno_podrucje)

Ne želim micati geometriju u 'master' tablicu, jer onda moram ili dodati logiku
na strani baze, ili drugačije hendlati import podataka...

Any ideas ?

Dražen

Senko Rasic

unread,
Apr 25, 2013, 3:46:05 PM4/25/13
to pyth...@googlegroups.com
Zanimljiv problem,

čini mi se da je tvoj trenutni pristup najsmisleniji. Eventualno bi bilo zgodno optimizirati stvar na način da napraviš union queryset koji se hopefully na nekim pametnim bazama može optimizirati (a u najgorem slučaju se svodi na isto kao chain), nešto tipa:

  def filter_subclasses(self, **filter):
      ret = None
      for subclass in self.model.__subclassess__():
          qs = subclass.objects.filter(**filter)
          ret = ret | qs if ret else qs
      return qs



2013/4/25 Dražen Odobašić <dodo...@gmail.com>

Dražen

--
Ovu ste poruku primili jer ste pretplaćeni na grupu "Python Hrvatska" kao jednu od Google Grupa.
Da biste poništili pretplatu na tu grupu i prestali primati e-poruke s nje, pošaljite e-poruku na python-hr+...@googlegroups.com.
Dodatne opcije potražite na adresi https://groups.google.com/groups/opt_out.





--
Senko Rašić, Good Code <http://goodcode.io/>

Berislav Lopac

unread,
Apr 25, 2013, 6:48:34 PM4/25/13
to pyth...@googlegroups.com
Nekako imam snažan feeling da se tu zbiva nešto vrlo krivo, ali teško mi je reći ovako na "proxy" primjeru, bilo bi mi puno lakše kad bih imao konkretan kod. Pretpostavljam da su modeli već postavljeni kakvi jesu i ne može se na njih puno utjecati, točno? Ima li neki poseban razlog zašto osnovni model nije apstraktan? Može li se možda riješiti kroz proxy modele?

Dražen Odobašić

unread,
Apr 26, 2013, 5:17:04 AM4/26/13
to pyth...@googlegroups.com
On 25.04.2013 21:46, Senko Rasic wrote:
> Zanimljiv problem,
>
> �ini mi se da je tvoj trenutni pristup najsmisleniji. Eventualno bi bilo
> zgodno optimizirati stvar na na�in da napravi� union queryset koji se
> hopefully na nekim pametnim bazama mo�e optimizirati (a u najgorem slu�aju
> se svodi na isto kao chain), ne�to tipa:
>
> def filter_subclasses(self, **filter):
> ret = None
> for subclass in self.model.__subclassess__():
> qs = subclass.objects.filter(**filter)
> ret = ret | qs if ret else qs
> return qs
>
>
>

Ovo ne�e raditi, jer se buni s "Cannot combine queries on two different base
models" ili tako ne�to.

No to me potaknulo da probam koristiti Q() objekte, primjer koda
https://dl.dropboxusercontent.com/u/7897514/example_projV2.zip

Pozitivno je �to se zadr�ava QuerySet chainability (mogu dodati i
django_model_utils InheritanceManager ako treba), ali nisam siguran je li
classmethod pristup 'po�eljan'
Reply all
Reply to author
Forward
0 new messages