Oprava migrace pro přidání čísla ke článku
This commit is contained in:
		
							parent
							
								
									443f05bddc
								
							
						
					
					
						commit
						7c54079394
					
				
					 1 changed files with 15 additions and 8 deletions
				
			
		|  | @ -5,25 +5,32 @@ import django.db.models.deletion | |||
| from seminar.treelib import get_parent | ||||
| 
 | ||||
| def najdi_cislo(apps, schema_editor): | ||||
| 	# | ||||
| 	Clanek = apps.get_model('seminar', 'Clanek') | ||||
| 	Hodnoceni = apps.get_model('seminar', 'Hodnoceni') | ||||
| 	Reseni = apps.get_model('seminar', 'Reseni') | ||||
| 	ReseniNode = apps.get_model('seminar', 'ReseniNode') | ||||
| 	CisloNode = apps.get_model('seminar', 'CisloNode') | ||||
| 	ContentType = apps.get_model('contenttypes', 'ContentType') | ||||
| 	 | ||||
| 	for c in Clanek.objects.all(): | ||||
| 		reseni = c.reseni_set | ||||
| 		if (len(reseni) != 1): | ||||
| 		if (reseni.count() != 1):	# Pozor, reseni_set je Manager, takže se na něj musí trošku jinak | ||||
| 			raise ValueError("Článek k sobě má nejedno řešení!") | ||||
| 		r = reseni[0] | ||||
| 		aktualniNode = r.reseninode | ||||
| 		r = reseni.first() | ||||
| 		aktualniNode = r.text_cely # Hlavní ReseniNode pro řešení | ||||
| 		while aktualniNode is not None: | ||||
| 			if isinstance(aktualniNode, CisloNode): | ||||
| 				c.cislo = aktualniNode.cislo | ||||
| 			#if isinstance(aktualniNode, CisloNode): # Nejde, protože aktualniNode se tváří jako obecný TreeNode... | ||||
| 			# Ale v dokumentaci k django-polymorphic se píše, že tam jsou nastavené nějaké fieldy na známé hodnoty :-) | ||||
| 			# https://django-polymorphic.readthedocs.io/en/stable/migrating.html | ||||
| 			cislonode_ct = ContentType.objects.get_for_model(CisloNode) | ||||
| 			akt_ct = aktualniNode.polymorphic_ctype | ||||
| 			if akt_ct == cislonode_ct: | ||||
| 				# Zneužíváme tu opačnou vazbu k treenode_ptr, protože | ||||
| 				# aktualniNode je "jen" TreeNode a ne CisloNode | ||||
| 				c.cislo = aktualniNode.cislonode.cislo | ||||
| 				c.save() | ||||
| 				break | ||||
| 			aktualniNode = get_parent() | ||||
| 			aktualniNode = get_parent(aktualniNode) | ||||
| 		 | ||||
| 
 | ||||
| 
 | ||||
|  | @ -39,5 +46,5 @@ class Migration(migrations.Migration): | |||
|             name='cislo', | ||||
|             field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='vydane_clanky', to='seminar.Cislo', verbose_name='číslo vydání'), | ||||
|         ), | ||||
| 	migrations.RunPython(najdi_cislo), | ||||
|     migrations.RunPython(najdi_cislo, migrations.RunPython.noop), | ||||
|     ] | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Pavel 'LEdoian' Turinsky
						Pavel 'LEdoian' Turinsky