1440
Comment:
|
3366
|
Deletions are marked like this. | Additions are marked like this. |
Line 56: | Line 56: |
Teraz ideme vytvoriť niekoľko žiakov a zaradiť ich do Tried. | Teraz ideme vytvoriť žiaka a (nevyhnutne) zaradiť ho do Triedy. {{{#!python >>> tretie_triedy=Trieda.objects.filter(rocnik=3) >>> print tretie_triedy [<Trieda: 3.A>, <Trieda: 3.B>, <Trieda: 3.C>] >>> z=Ziak(meno="Jan",priezvisko="Prvy",trieda=tretie_triedy[0]) >>> z.save() >>> print z Jan Prvy >>> print z.trieda 3.A >>> }}} Jan Prvy bol zaradený do 3.A triedy. Všimnite si, že {{{print z.trieda}}} nám volá metódu {{{Trieda.__unicode__}}}. Fakticky, {{{z.trieda}}} je typu trieda: {{{#!python >>> type(z.trieda) <class 'skola.znamky.models.Trieda'> }}} Preraďme žiaka Jan Prvy do tretej B: {{{#!python >>> tretia_B=Trieda.objects.get(rocnik=3,pismeno="B") >>> jan_prvy=Ziak.objects.get(meno="Jan",priezvisko="Prvy") >>> jan_prvy.trieda=tretia_B >>> jan_prvy.save() >>> }}} Ešte vytvoríme zopár žiakov {{{#!python >>> Ziak(meno="Jozef",priezvisko="Druhy",trieda=tretia_B).save() >>> Ziak(meno="Katarina",priezvisko="Tretia",trieda=tretia_B).save() >>> tretia_A=Trieda.objects.get(rocnik=3,pismeno="A") >>> Ziak(meno="Milan",priezvisko="Stvrty",trieda=tretia_A).save() >>> Ziak(meno="Jana",priezvisko="Piata",trieda=tretia_A).save() >>> Ziak(meno="Anna",priezvisko="Siesta",trieda=tretia_A).save() >>> }}} == Vypísanie žiakov patriacich do triedy == Prvý spôsob je jednoducho použiť filter na všetkých žiakov. {{{#!python >>> tretia_A=Trieda.objects.get(rocnik=3,pismeno="A") >>> ziaci_3A=Ziak.objects.filter(trieda=tretia_A) >>> print ziaci_3A [<Ziak: Milan Stvrty>, <Ziak: Jana Piata>, <Ziak: Anna Siesta>] >>> }}} Druhý spôsob je takto: {{{#!python >>> ziaci_3A=tretia_A.ziak_set.all() >>> print ziaci_3A [<Ziak: Milan Stvrty>, <Ziak: Jana Piata>, <Ziak: Anna Siesta>] >>> }}} Otázka je, čo je rýchlejšie. Odpoveď v tejto chvíli nepoznám, závisí to od toho, ako inteligentne django ošetrí prvý spôsob. Som si istý, že druhý spôsob nie je pomalší ako prvý. |
Zložitejší model
Uchovávať dáta v jedinom modeli nie je väčšinou výhodné. Model, ktorý sme použili v predošlom prípade má mnoho zásadných nevýhod.
Na prvý pohľad vidno, že dáta sú v ňom duplicitné. Teda ak budeme chcieť zmeniť nejaký údaj (meno učiteľa napríklad) musíme to urobiť na mnohých miestach.
Teraz si ukážeme lepší prístup
Trieda a žiak
Začnime Triedou.
Toto je jednoduché, nič nové sa nedozvedáme.
Trieda Ziak je zaujímavejšia.
Vidíme, že obsahuje referenciu na Triedu. Žiak patrí do jedinej Triedy.
Ukážme si, ako sa s týmito modelmi dá pracovať.
Vytvorme zopár Tried.
Teraz ideme vytvoriť žiaka a (nevyhnutne) zaradiť ho do Triedy.
Jan Prvy bol zaradený do 3.A triedy. Všimnite si, že print z.trieda nám volá metódu Trieda.__unicode__. Fakticky, z.trieda je typu trieda:
Preraďme žiaka Jan Prvy do tretej B:
Ešte vytvoríme zopár žiakov
1 >>> Ziak(meno="Jozef",priezvisko="Druhy",trieda=tretia_B).save()
2 >>> Ziak(meno="Katarina",priezvisko="Tretia",trieda=tretia_B).save()
3 >>> tretia_A=Trieda.objects.get(rocnik=3,pismeno="A")
4 >>> Ziak(meno="Milan",priezvisko="Stvrty",trieda=tretia_A).save()
5 >>> Ziak(meno="Jana",priezvisko="Piata",trieda=tretia_A).save()
6 >>> Ziak(meno="Anna",priezvisko="Siesta",trieda=tretia_A).save()
7 >>>
Vypísanie žiakov patriacich do triedy
Prvý spôsob je jednoducho použiť filter na všetkých žiakov.
Druhý spôsob je takto:
Otázka je, čo je rýchlejšie. Odpoveď v tejto chvíli nepoznám, závisí to od toho, ako inteligentne django ošetrí prvý spôsob. Som si istý, že druhý spôsob nie je pomalší ako prvý.