Differences between revisions 5 and 7 (spanning 2 versions)
Revision 5 as of 2009-03-17 11:28:03
Size: 1964
Editor: 95
Comment:
Revision 7 as of 2009-03-17 11:38:22
Size: 2701
Editor: 95
Comment:
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. 
Line 78: Line 78:
Preraďme žiaka Jan Prvy do tretej B:
Line 79: Line 80:
{{{#!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 ==

 

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.

   1 class Trieda(models.Model):
   2     rocnik=models.IntegerField()
   3     pismeno=models.CharField(max_length=5)
   4 
   5     def __unicode__(self):
   6         return u"%d.%s" % (self.rocnik,self.pismeno)

Toto je jednoduché, nič nové sa nedozvedáme.

Trieda Ziak je zaujímavejšia.

   1 class Ziak(models.Model):
   2     meno=models.CharField(max_length=50)
   3     priezvisko=models.CharField(max_length=50)
   4     trieda=models.ForeignKey(Trieda)    
   5     
   6     def __unicode__(self):
   7         return u"%s %s" % (self.meno,self.priezvisko)

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.

   1 >>> from znamky.models import *
   2 >>> t=Trieda(rocnik=3,pismeno="A")
   3 >>> t.save()
   4 >>> t=Trieda(rocnik=3,pismeno="B")
   5 >>> t.save()
   6 >>> t=Trieda(rocnik=3,pismeno="C")
   7 >>> t.save()
   8 >>>

Teraz ideme vytvoriť žiaka a (nevyhnutne) zaradiť ho do Triedy.

   1 >>> tretie_triedy=Trieda.objects.filter(rocnik=3)
   2 >>> print tretie_triedy
   3 [<Trieda: 3.A>, <Trieda: 3.B>, <Trieda: 3.C>]
   4 >>> z=Ziak(meno="Jan",priezvisko="Prvy",trieda=tretie_triedy[0])
   5 >>> z.save()
   6 >>> print z
   7 Jan Prvy
   8 >>> print z.trieda
   9 3.A
  10 >>>

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:

   1 >>> type(z.trieda)
   2 <class 'skola.znamky.models.Trieda'>

Preraďme žiaka Jan Prvy do tretej B:

   1 >>> tretia_B=Trieda.objects.get(rocnik=3,pismeno="B")
   2 >>> jan_prvy=Ziak.objects.get(meno="Jan",priezvisko="Prvy")
   3 >>> jan_prvy.trieda=tretia_B
   4 >>> jan_prvy.save()
   5 >>>  

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

KMaDGWiki: ProgramovanieInternetovychAplikacii/BetterModel (last edited 2009-03-17 17:53:37 by 95)