On May 22, 2014, at 7:42 AM, Pavel Aborilov <abori...@gmail.com> wrote:

> Hi!
> How can I set default for parent field?
> 
> class DB_Object(Base):
>     __tablename__ = 'objects' 
>     id = Column(Integer, primary_key=True) 
>     name = Column(String(50), unique=True, nullable=False) 
>     type = Column(String(50)) 
>     __mapper_args__ = { 'polymorphic_identity': 'object', 'polymorphic_on': 
> type }
> 
> class Command(DB_Object): 
>     __tablename__ = "commands" 
>     id = Column(Integer, ForeignKey('objects.id'), primary_key=True) 
>     name = Column(String(50), default="Command")
> 
> If I try to commit Command object
> I have "objects.name may not be NULL"

This is all assuming that "name" is the same value on both DB_Object and on 
Command.  

Since Command extends from DB_Object, you'd want to remove the "name "column 
from the "commands" table - it is redundant vs. the "name" column that's on 
"objects".

Alternatively, you can map both "name" columns on Command as follows:

class Command(DB_Object):
    # ...

   name = column_property(Column(String(50), default="Command"), DB_Object.name)

However, in either case, you will also need to establish that "default" value 
in the constructor (or in the init event, see 
http://docs.sqlalchemy.org/en/latest/orm/events.html?highlight=init%20event#sqlalchemy.orm.events.InstanceEvents.init)
 , so that it applies to both "name" columns during flush:

class Command(DB_Object):
    # ...

    def __init__(self, **kw):
        kw.setdefault("name", "Command")
        super(Command, self).__init__(**kw)








> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to sqlalchemy+unsubscr...@googlegroups.com.
> To post to this group, send email to sqlalchemy@googlegroups.com.
> Visit this group at http://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to