Models: Dneska jsme zase překopali model. Už zase nám dává smysl
This commit is contained in:
		
							parent
							
								
									2a347d988f
								
							
						
					
					
						commit
						0ee4ac877e
					
				
					 1 changed files with 21 additions and 71 deletions
				
			
		|  | @ -751,14 +751,6 @@ class Clanek(Problem): | ||||||
| 		verbose_name = 'Článek' | 		verbose_name = 'Článek' | ||||||
| 		verbose_name_plural = 'Články' | 		verbose_name_plural = 'Články' | ||||||
| 	 | 	 | ||||||
| 	cislo = models.ForeignKey(Cislo, verbose_name='číslo', blank=True, null=True, |  | ||||||
| 		on_delete=models.PROTECT) |  | ||||||
| 
 |  | ||||||
| 	resitelsky = models.BooleanField('Jde o řešitelský článek?', default=True) |  | ||||||
| 
 |  | ||||||
| 	# má OneToOneField s: |  | ||||||
| 	# ClanekNode |  | ||||||
| 
 |  | ||||||
| 	def kod_v_rocniku(self): | 	def kod_v_rocniku(self): | ||||||
| 		if self.stav == 'zadany': | 		if self.stav == 'zadany': | ||||||
| # Nemělo by být potřeba | # Nemělo by být potřeba | ||||||
|  | @ -767,15 +759,6 @@ class Clanek(Problem): | ||||||
| 			return "c{}".format(self.kod) | 			return "c{}".format(self.kod) | ||||||
| 		return '<Není zadaný>' | 		return '<Není zadaný>' | ||||||
| 
 | 
 | ||||||
| 	def save(self, *args, **kwargs): |  | ||||||
| 		super().save(*args, **kwargs) |  | ||||||
| 		# *Node.save() aktualizuje název *Nodu. |  | ||||||
| 		try: |  | ||||||
| 			self.claneknode.save() |  | ||||||
| 		except ObjectDoesNotExist: |  | ||||||
| 			# Neexistující *Node nemá smysl aktualizovat. |  | ||||||
| 			pass |  | ||||||
| 
 |  | ||||||
| class Text(SeminarModelBase): | class Text(SeminarModelBase): | ||||||
| 	class Meta: | 	class Meta: | ||||||
| 		db_table = 'seminar_texty' | 		db_table = 'seminar_texty' | ||||||
|  | @ -885,12 +868,9 @@ class Reseni(SeminarModelBase): | ||||||
| 	forma = models.CharField('forma řešení', max_length=16, choices=FORMA_CHOICES, blank=False, | 	forma = models.CharField('forma řešení', max_length=16, choices=FORMA_CHOICES, blank=False, | ||||||
| 		 default=FORMA_EMAIL) | 		 default=FORMA_EMAIL) | ||||||
| 
 | 
 | ||||||
| 	text_cely = models.OneToOneField(Text, verbose_name='Plná verze textu řešení',  | 	text_cely = models.OneToOneField(ReseniNode, verbose_name='Plná verze textu řešení',  | ||||||
| 		blank=True, null=True, related_name="reseni_cely_set", | 		blank=True, null=True, related_name="reseni_cely_set", | ||||||
| 		on_delete=models.SET_NULL) | 		on_delete=models.PROTECT) | ||||||
| 
 |  | ||||||
| 	text_zkraceny = models.ManyToManyField(Text, verbose_name='zkrácené verze řešení', |  | ||||||
| 		help_text='Seznam úryvků z řešení',related_name="reseni_zkraceny_set") |  | ||||||
| 
 | 
 | ||||||
| 	poznamka = models.TextField('neveřejná poznámka', blank=True, | 	poznamka = models.TextField('neveřejná poznámka', blank=True, | ||||||
| 		help_text='Neveřejná poznámka k řešení (plain text)') | 		help_text='Neveřejná poznámka k řešení (plain text)') | ||||||
|  | @ -1100,7 +1080,7 @@ class Soustredeni_Organizatori(SeminarModelBase): | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @reversion.register(ignore_duplicates=True) | @reversion.register(ignore_duplicates=True) | ||||||
| class Konfera(models.Model): | class Konfera(Problem): | ||||||
| 	class Meta: | 	class Meta: | ||||||
| 		db_table = 'seminar_konfera' | 		db_table = 'seminar_konfera' | ||||||
| 		verbose_name = 'Konfera' | 		verbose_name = 'Konfera' | ||||||
|  | @ -1108,17 +1088,12 @@ class Konfera(models.Model): | ||||||
| 	# Interní ID | 	# Interní ID | ||||||
| 	id = models.AutoField(primary_key = True) | 	id = models.AutoField(primary_key = True) | ||||||
| 
 | 
 | ||||||
| 	nazev = models.CharField('název konfery', max_length=100, help_text = 'Název konfery') |  | ||||||
| 	 |  | ||||||
| 	anotace = models.TextField('anotace', blank=True, | 	anotace = models.TextField('anotace', blank=True, | ||||||
| 		help_text='Popis, o čem bude konfera.') | 		help_text='Popis, o čem bude konfera.') | ||||||
| 	 | 	 | ||||||
| 	abstrakt = models.TextField('abstrakt', blank=True, | 	abstrakt = models.TextField('abstrakt', blank=True, | ||||||
| 		help_text='Abstrakt konfery tak, jak byl uveden ve sborníku') | 		help_text='Abstrakt konfery tak, jak byl uveden ve sborníku') | ||||||
| 	 | 	 | ||||||
| 	organizator = models.ForeignKey(Organizator, verbose_name='organizátor', related_name='konfery', |  | ||||||
| 			on_delete = models.SET_NULL, null=True) |  | ||||||
| 
 |  | ||||||
| 	# FIXME: Umíme omezit jen na účastníky daného soustřeďka? | 	# FIXME: Umíme omezit jen na účastníky daného soustřeďka? | ||||||
| 	ucastnici = models.ManyToManyField(Resitel, verbose_name='účastníci konfery', | 	ucastnici = models.ManyToManyField(Resitel, verbose_name='účastníci konfery', | ||||||
| 		help_text='Seznam účastníků konfery', through='Konfery_Ucastnici') | 		help_text='Seznam účastníků konfery', through='Konfery_Ucastnici') | ||||||
|  | @ -1126,13 +1101,6 @@ class Konfera(models.Model): | ||||||
| 	soustredeni = models.ForeignKey(Soustredeni, verbose_name='soustředění',  | 	soustredeni = models.ForeignKey(Soustredeni, verbose_name='soustředění',  | ||||||
| 			related_name='konfery', on_delete = models.SET_NULL, null=True) | 			related_name='konfery', on_delete = models.SET_NULL, null=True) | ||||||
| 
 | 
 | ||||||
| 	poznamka = models.TextField('neveřejná poznámka', blank=True, |  | ||||||
| 		help_text='Neveřejná poznámka ke konfeře(plain text)') |  | ||||||
| 	# Jedno reseni se vztahuje nejvyse k jedne konfere |  | ||||||
| 	reseni = models.OneToOneField(Reseni, verbose_name='článek ke konfeře', related_name='konfery', |  | ||||||
| 		help_text='Účastnický přípěvek o konfeře', on_delete = models.SET_NULL,  |  | ||||||
| 		null=True, blank=True) |  | ||||||
| 
 |  | ||||||
| 	TYP_VELETRH = 'veletrh' | 	TYP_VELETRH = 'veletrh' | ||||||
| 	TYP_PREZENTACE = 'prezentace' | 	TYP_PREZENTACE = 'prezentace' | ||||||
| 	TYP_CHOICES = [ | 	TYP_CHOICES = [ | ||||||
|  | @ -1149,21 +1117,9 @@ class Konfera(models.Model): | ||||||
| 			help_text = 'Další materiály ke konfeře zabalené do jednoho souboru',  | 			help_text = 'Další materiály ke konfeře zabalené do jednoho souboru',  | ||||||
| 			upload_to = generate_filename_konfera, blank=True) | 			upload_to = generate_filename_konfera, blank=True) | ||||||
| 
 | 
 | ||||||
| 	# má OneToOneField s: |  | ||||||
| 	# KonferaNode |  | ||||||
| 
 |  | ||||||
| 	def __str__(self): | 	def __str__(self): | ||||||
| 		return "{}: ({})".format(self.nazev, self.soustredeni) | 		return "{}: ({})".format(self.nazev, self.soustredeni) | ||||||
| 
 | 
 | ||||||
| 	def save(self, *args, **kwargs): |  | ||||||
| 		super().save(*args, **kwargs) |  | ||||||
| 		# *Node.save() aktualizuje název *Nodu. |  | ||||||
| 		try: |  | ||||||
| 			self.konferanode.save() |  | ||||||
| 		except ObjectDoesNotExist: |  | ||||||
| 			# Neexistující *Node nemá smysl aktualizovat. |  | ||||||
| 			pass |  | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
| # Vazebna tabulka. Mozna se generuje automaticky. | # Vazebna tabulka. Mozna se generuje automaticky. | ||||||
| @reversion.register(ignore_duplicates=True) | @reversion.register(ignore_duplicates=True) | ||||||
|  | @ -1376,36 +1332,30 @@ class TemaVCisleNode(TreeNode): | ||||||
| 	def getOdkazStr(self): | 	def getOdkazStr(self): | ||||||
| 		return str(self.tema) | 		return str(self.tema) | ||||||
| 
 | 
 | ||||||
| class KonferaNode(TreeNode): | class OrgTextNode(TreeNode): | ||||||
| 	class Meta: |  | ||||||
| 		db_table = 'seminar_nodes_konfera' |  | ||||||
| 		verbose_name = 'Konfera (Node)' |  | ||||||
| 		verbose_name_plural = 'Konfery (Node)' |  | ||||||
| 	konfera = models.OneToOneField(Konfera, |  | ||||||
| 		on_delete=models.PROTECT, # Pokud chci mazat téma, musím si Node pořešit ručně |  | ||||||
| 		verbose_name = "konfera", |  | ||||||
| 		null=True, |  | ||||||
| 		blank=False) |  | ||||||
| 
 |  | ||||||
| 	def aktualizuj_nazev(self): |  | ||||||
| 		self.nazev = "KonferaNode: "+str(self.konfera) |  | ||||||
| 
 |  | ||||||
| class ClanekNode(TreeNode): |  | ||||||
| 	class Meta: | 	class Meta: | ||||||
| 		db_table = 'seminar_nodes_clanek' | 		db_table = 'seminar_nodes_clanek' | ||||||
| 		verbose_name = 'Článek (Node)' | 		verbose_name = 'Článek (Node)' | ||||||
| 		verbose_name_plural = 'Články (Node)' | 		verbose_name_plural = 'Články (Node)' | ||||||
| 	clanek = models.OneToOneField(Clanek, | 	 | ||||||
| 		on_delete=models.PROTECT, # Pokud chci mazat téma, musím si Node pořešit ručně | 	organizator = models.ForeignKey(Organizator, | ||||||
| 		verbose_name = "článek", | 		null=False, | ||||||
| 		null=True, | 		blank=False, | ||||||
| 		blank=False) | 		on_delete=models.DO_NOTHING, | ||||||
|  | 		verbose_name="Organizátor", | ||||||
|  | 		) | ||||||
|  | 	org_verejny = models.BooleanField(default = True, | ||||||
|  | 		verbose_name = "Org je veřejný?", | ||||||
|  | 		help_text = "Pokud ano, bude org pod článkem podepsaný", | ||||||
|  | 		null=False, | ||||||
|  | 		) | ||||||
| 
 | 
 | ||||||
| 	def aktualizuj_nazev(self): | 	def aktualizuj_nazev(self): | ||||||
| 		self.nazev = "ClanekNode: "+str(self.clanek) | 		return f"OrgTextNode začínající následujícim: {self.first_child.nazev}" | ||||||
| 
 | 
 | ||||||
| 	def getOdkazStr(self): | 	# FIXME!!! | ||||||
| 		return str(self.clanek) | 	#def getOdkazStr(self): | ||||||
|  | 	#	return str(self.clanek) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class UlohaZadaniNode(TreeNode): | class UlohaZadaniNode(TreeNode): | ||||||
|  | @ -1486,7 +1436,7 @@ class CastNode(TreeNode): | ||||||
| 	def getOdkazStr(self): | 	def getOdkazStr(self): | ||||||
| 		return str(self.nadpis) | 		return str(self.nadpis) | ||||||
| 
 | 
 | ||||||
| class OtisteneReseniNode(TreeNode): | class ReseniNode(TreeNode): | ||||||
| 	class Meta: | 	class Meta: | ||||||
| 		db_table = 'seminar_nodes_otistene_reseni' | 		db_table = 'seminar_nodes_otistene_reseni' | ||||||
| 		verbose_name = 'Otištěné řešení (Node)' | 		verbose_name = 'Otištěné řešení (Node)' | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Pavel 'LEdoian' Turinsky
						Pavel 'LEdoian' Turinsky