Massimo ha scritto:
Manlio Perillo ha scritto:
[...]
Ok, mi sta anche bene... infatti se l'ipotetico utente mi inserisse in
pk dei valori già presenti io vorrei appunto caricare l'oggetto, e
lasciargli poi modificare i campi non-pk, quindi consentirgli l'update.
Questo era più o meno il senso...
Ora mi è più chiaro cosa vuoi fare.
Credo che comunque tu stia seguendo un approccio leggermente errato.
Se l'utente vuole creare un nuovo dato, l'interfaccia deve essere
diversa dal caso in cui vuole caricare un dato già esistente.
Sono due operazioni diverse.
Infatti per caricare un oggetto ti serve solo la sua primary key, per
crearne uno nuovo di solito ti servono altri dati.
Se l'utente inserisce dei dati già presenti, gli si mostra un errore.
[...]
Non sono proprio sicuro di capire la logica del tutto.
Quando vuoi salvare un oggetto, lo crei e quindi fai sess.save(obj) .
Ok. Tutto bene se il nuovo oggetto non ha equivalente nel dbms, ma se
esiste un equivalente record l'ORM mi solleva eccezione e non riesco a
fare l'update.
Questo problema si deve eliminare alla radice, tenendo ben separate le
due interfacce.
Se lo vuoi caricare fai sess.load(pk)
Mi va bene facendo:
oggetto = session.load(pk)
ma io volevo preparare un comportamento quale:
oggetto.load(pk)
In genere le operazioni "crea nuovo" e "modifica esistente" sono ben
separate, ma sembra esserci diversa gente per cui non è così (tanto
che MySQL ha un INSERT OR UPDATE).
Secondo me dipende molto da cosa vuoi lasciar fare all'utente finale.
L'obiettivo che vorrei raggiungere io è lasciargli creare un nuovo
oggetto. Poi inserisce i valori che vuole. Quando completa la pk il
framework gli dice: occhio che già c'è questo oggetto. Se vuoi lo carico
così puoi modificarlo. In alternativa, cambia alcuni campi (quelli che
compongono la pk, così da prepararne una nuova).
Non so se sono riuscito a far comprendere la logica applicativa che ho
in mente...
Si, sei stato chiarissimo.
obj = MyClass(*kwargs)
sess.save(obj(
try:
sess.flush()
except SQLError:
obj = sess.load(...)
# Mostra pannello per la modifica
> [...]
Saluti Manlio Perillo
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python