models aus models erzeugen

Django, Flask, Bottle, WSGI, CGI…
Antworten
snoer
User
Beiträge: 29
Registriert: Montag 2. Juni 2008, 18:13

moin.

ich möchte ein model in ein anderes model konvertieren.
beide models haben die selben felder.

Code: Alles auswählen

class Model_Base(
	name = models.CharField('name', max_length=50)
	[...]
	class Meta:
		abstract = True

class Model1(Model_Base):	
	def __unicode__(self):
		return self.name

class Model2(Model_Base):	
	def __unicode__(self):
		return self.name
Model1 kann über eine ModelForm erstellt und bearbeitet werden.

nun war meine idee eine ModelForm aus Model2 zu erzeugen, diese mit einer instanz von Model1 zu befüllen, und die ModelForm2 abzuspeichern.
dabei soll dann ein Model2 rauskommen, das die werte vom Model1 hat.

tuts aber nicht ":)
es kommt wieder ein Model1 dabei raus.
EDIT:
das lag aber daran, dass ich instance=model1 gesetzt hatte. wenn ich aber einfach nur ModelForm2(model1) aufrufe bekomme ich einen fehler:
Caught AttributeError while rendering: Model1 object has no attribute 'get'
---


wie kann ich also aus Model1 ein Model2 erzeugen? kann mir mal jemand das hirn entknoten?

kann ich vielleicht einfach model.__class__ verändern? und dann erneut abspeichern?
wozu ist die obj._meta.contribute_to_class methode gut? vielleicht genau für so etwas?
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Das hört sich alles ziemlich arg komisch an... wieso willst du das überhaupt tun? Ich bin mir sicher, dass es einen eleganteren Lösungsansatz für dein Problem gibt :-)
snoer
User
Beiträge: 29
Registriert: Montag 2. Juni 2008, 18:13

ich hab auch langsam das gefühl x)

es geht darum, dass die datensätze verschiedene "stadien" durchlaufen. auf die unterschiedlichen tabellen werden dann unterschiedliche aktionen angewandt.
anfangs hatte ich nur ein model mit einem zusätzlichen feld in dem der status stand. ein freund der sich besser mit der materie auskennt als ich sagte aber,
dass es nicht gut ist, wenn sich eine tabelle so aufbläht. das schien mir plausibel.

ich weiss ja nicht wie genau eine datenbank arbeitet, aber ich fand es sehr einleuchtend, dass es besser ist ohne großes abfragen von feldern die aktionen
einfach auf alle einträge in der entsprechenden db zu machen.

zb soll ein bild hochgeladen werden (stadium1) dann durch einen mod aktiviert werden (stadium2) beim aktivieren wird das bild gescaled und so dann soll das bild irgendwann expiren (stadium3)
und dann halt gelöscht werden.

vielleicht war der ursprüngliche ansatz doch der bessere? ":>
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Also ich würde da schon den Ansatz mit dem Status verwenden. Ist viel einfacher und unkomplizierter als Daten-Rumschieben zwischen Tabellen.
snoer
User
Beiträge: 29
Registriert: Montag 2. Juni 2008, 18:13

ich hab mich halt drauf verlassen, was mir gesagt wurde.

weisst du wie das datenbankintern so abläuft?

einfacher ist ja nicht immer pauschal besser :)
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

snoer hat geschrieben:weisst du wie das datenbankintern so abläuft?
was?
einfacher ist ja nicht immer pauschal besser :)
beim Programmieren fast immer.
snoer
User
Beiträge: 29
Registriert: Montag 2. Juni 2008, 18:13

naja... mich würde halt interessieren (aber da muss ich wohl einfach mal n bisschen was lesen) was performanter ist.
aber um das ernsthaft beurteilen zu können, muss man wohl wissen wie genau in der datenbank die abfrage gehandelt wird
und wieviele ressourcen das verbraucht.

vielleicht mal was für kalte wintermonate ;)

danke jedenfalls für deine meinung!

unabhängig davon interessiert mich aber weiterhin, wie ihr oben bechriebenes problem lösen würdet.
Antworten