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_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): | ||||
| 		if self.stav == 'zadany': | ||||
| # Nemělo by být potřeba | ||||
|  | @ -767,15 +759,6 @@ class Clanek(Problem): | |||
| 			return "c{}".format(self.kod) | ||||
| 		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 Meta: | ||||
| 		db_table = 'seminar_texty' | ||||
|  | @ -885,13 +868,10 @@ class Reseni(SeminarModelBase): | |||
| 	forma = models.CharField('forma řešení', max_length=16, choices=FORMA_CHOICES, blank=False, | ||||
| 		 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", | ||||
| 		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, | ||||
| 		help_text='Neveřejná poznámka k řešení (plain text)') | ||||
| 
 | ||||
|  | @ -1100,7 +1080,7 @@ class Soustredeni_Organizatori(SeminarModelBase): | |||
| 
 | ||||
| 
 | ||||
| @reversion.register(ignore_duplicates=True) | ||||
| class Konfera(models.Model): | ||||
| class Konfera(Problem): | ||||
| 	class Meta: | ||||
| 		db_table = 'seminar_konfera' | ||||
| 		verbose_name = 'Konfera' | ||||
|  | @ -1108,17 +1088,12 @@ class Konfera(models.Model): | |||
| 	# Interní ID | ||||
| 	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, | ||||
| 		help_text='Popis, o čem bude konfera.') | ||||
| 	 | ||||
| 	abstrakt = models.TextField('abstrakt', blank=True, | ||||
| 		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? | ||||
| 	ucastnici = models.ManyToManyField(Resitel, verbose_name='účastníci konfery', | ||||
| 		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í',  | ||||
| 			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_PREZENTACE = 'prezentace' | ||||
| 	TYP_CHOICES = [ | ||||
|  | @ -1149,21 +1117,9 @@ class Konfera(models.Model): | |||
| 			help_text = 'Další materiály ke konfeře zabalené do jednoho souboru',  | ||||
| 			upload_to = generate_filename_konfera, blank=True) | ||||
| 
 | ||||
| 	# má OneToOneField s: | ||||
| 	# KonferaNode | ||||
| 
 | ||||
| 	def __str__(self): | ||||
| 		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. | ||||
| @reversion.register(ignore_duplicates=True) | ||||
|  | @ -1376,36 +1332,30 @@ class TemaVCisleNode(TreeNode): | |||
| 	def getOdkazStr(self): | ||||
| 		return str(self.tema) | ||||
| 
 | ||||
| class KonferaNode(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 OrgTextNode(TreeNode): | ||||
| 	class Meta: | ||||
| 		db_table = 'seminar_nodes_clanek' | ||||
| 		verbose_name = 'Článek (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ě | ||||
| 		verbose_name = "článek", | ||||
| 		null=True, | ||||
| 		blank=False) | ||||
| 	 | ||||
| 	organizator = models.ForeignKey(Organizator, | ||||
| 		null=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): | ||||
| 		self.nazev = "ClanekNode: "+str(self.clanek) | ||||
| 		return f"OrgTextNode začínající následujícim: {self.first_child.nazev}" | ||||
| 
 | ||||
| 	def getOdkazStr(self): | ||||
| 		return str(self.clanek) | ||||
| 	# FIXME!!! | ||||
| 	#def getOdkazStr(self): | ||||
| 	#	return str(self.clanek) | ||||
| 
 | ||||
| 
 | ||||
| class UlohaZadaniNode(TreeNode): | ||||
|  | @ -1486,7 +1436,7 @@ class CastNode(TreeNode): | |||
| 	def getOdkazStr(self): | ||||
| 		return str(self.nadpis) | ||||
| 
 | ||||
| class OtisteneReseniNode(TreeNode): | ||||
| class ReseniNode(TreeNode): | ||||
| 	class Meta: | ||||
| 		db_table = 'seminar_nodes_otistene_reseni' | ||||
| 		verbose_name = 'Otištěné řešení (Node)' | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Pavel 'LEdoian' Turinsky
						Pavel 'LEdoian' Turinsky