2016-04-03 35 views
0

benim eski kod göç oldu (yerine unicode örneği var) olarak ilişkisiz yöntem make_valid_name() Kullanıcı örneği ile çağrılmalıdırTypeError: - seans yapımcısı ilk argüman şişe sqlalchemy</p> <pre><code>from flask.ext.sqlalchemy import SQLAlchemy </code></pre> <p>sqlalchemy.orm ila

from sqlalchemy.orm import sessionmaker 

Modeli

@staticmethod 
class User(Base): 
    __tablename__ = 'user' 
    id   = Column(Integer  , primary_key=True) 
    name  = Column(String(20)  , unique=True, nullable=False) 
. 
. 
. 
    def make_valid_name(name): 
     return re.sub('[^a-zA-Z0-9_\.]', '', name) 

Formu

def validate(self): 
. 
. 
.  
if self.name.data != User.make_valid_name(self.name.data): 
       self.name.errors.append('Please use letters, numbers, dots and underscores only.') 
       return False 

yöntem self.validate için bir çağrı (yaparken) i "self.name.data doğrulamak nasıl, hata

TypeError: unbound method make_valid_name() must be called with User instance as first argument (got unicode instance instead) 

Değiştirilmiş gerekenleri emin değilim şu atar "Saha verilerinden

Bu konuda herhangi bir yardım harika olacaktır.

+0

mu Var olan kullanım tutmak istiyorsanız çözüm değil sınıfı staticmethod ile yöntemi süslemek için @ staticmethod, atladığınız kodda görünüyor mu? – dirn

+0

evet, onun statik bir yöntem. – Pradeep

cevap

0

Tek seçenek ardından yerine formu nesne adını parametre olarak doğrudan

user = User(
name = self.name.data 
) 

if self.name.data != User.make_valid_name(user): 

ve modelde

user.name 

aynı erişen geçmesine tekrar Kullanıcı nesnesi oluşturmak ve özelliklerini başlatılamadı oldu: @ zorunda her şeyi yeniden yaz.

Diğer herhangi bir optimum çözüm de takdir edilecektir. Birisi gelecekte benzer bir sorunla karşı karşıyaysa.

1

Bu hata, User.make_valid_name'un beklediğiniz gibi statik bir yöntem değil, bir örnek yöntem anlamına gelir. bunu yapmak yerine classmethod olabilir, Alternatif

class User(Base): 
    ... 
    @staticmethod 
    def make_valid_name(name): 
     return ... 

:

class User(Base): 
    ... 
    @classmethod 
    def make_valid_name(cls, name): 
     return ...