2016-04-12 22 views
6

Bir ada sahip (adında, laboratuvarda yaygın olarak kullanılan ad) ve uzun ad için başka bir sütun içeren bir sınıf yazmaya çalışıyorum (isim aslında tamamlanmamıştır). Uzun bir ismin belirtilmemesi durumunda, sınıfın sadece isim alanının değerini uzun isim alanına kopyaladığını söylemek biraz wy var mı? name tanımsız olduğundan,SQLAlchemy, bir sütunun varsayılan değerini başka bir sütunun değerine ayarlar

class Substance(Base): 
    __tablename__ = "substances" 
    id = Column(Integer, primary_key=True) 
    code = Column(String, unique=True) 
    name = Column(String, unique=True) 
    long_name = Column(String, unique=True, default=name) 

Ama bu başarısız:

böyle bir şey denedik. Yapabileceğim başka bir şey var mı? Başka birinin değeri varsayılan, birçok varsayılan fonksiyonları yazılmasını önlemek için bir yardımcı işlevi yazabilirsiniz birden fazla sütunu varsa

cevap

9

Sen r-m-n cevabı ek olarak context-sensitive default function

def mydefault(context): 
    return context.current_parameters.get('name') 

class Substance(Base): 
    __tablename__ = "substances" 
    id = Column(Integer, primary_key=True) 
    code = Column(String, unique=True) 
    name = Column(String, unique=True) 
    long_name = Column(String, unique=True, default=mydefault) 
6

oluşturabilir.

def same_as(column_name): 
    def default_function(context): 
     return context.current_parameters.get(column_name) 
    return default_function 

# or as a one-liner 
same_as = lambda col: lambda ctx: ctx.current_parameters.get(col) 

class Substance(Base): 
    __tablename__ = "substances" 
    id = Column(Integer, primary_key=True) 
    name = Column(String, unique=True) 
    long_name = Column(String, unique=True, default=same_as('name')) 
    created = Column(DateTime, default=datetime.now) 
    edited = Column(DateTime, default=same_as('created')) 
İlgili konular