2017-11-19 2 views
0

좋아요, 그래서 제목이 다소 혼란 스럽기 때문에 여기에서 설명하기 위해 최선을 다할 것입니다. 나는 사람들이 영화와 TV 프로그램을 검색 할 수있는 간단한 웹 사이트를 만드는 과정에있다. 사용자 인 경우 영화/TV 프로그램을 주시 목록에 추가 할 수도 있습니다. 지금 현재, 나는이 테이블이 :하나의 항목이 만들어 질 때 다른 테이블에 항목을 만듭니다.

class User(db.Model, UserMixin): 
    id = db.Column(db.Integer, autoincrement=True, primary_key=True) 
    watchList_id = db.Column(db.Integer, db.ForeignKey('watchList.watchList_id'), nullable=False, autoincrement=True) 
    first_name = db.Column(db.String(120)) 
    last_name = db.Column(db.String(120)) 
    email = db.Column(db.String(180), unique=True) 
    password = db.Column(db.String(255)) 
    is_admin = db.Column(db.Boolean(), default=False) 
    active = db.Column(db.Boolean()) 
    confirmed_at = db.Column(db.DateTime()) 
    roles = db.relationship('Role', secondary=roles_users, backref=db.backref('users', lazy='dynamic')) 


class watchList(db.Model): 
    __tablename__ = "watchList" 

    watchList_id = db.Column(db.Integer, autoincrement=True, primary_key=True) 
    title = db.Column(db.String(200), unique=True) 
    releaseDate = db.Column(db.Date) 
    producer = db.Column(db.String(100)) 
    description = db.Column(db.String(300)) 
    genre = db.Column(db.String(50)) 
    image = db.Column(db.String(300)) 
나는 기본적으로 사용자는 작성되는 해당 사용자에 대한 관심 목록을 작성되는 경우 위치로 기능을 원하지만 지금 나는이 오류가 계속

그들의 가치가없는 것을 사용자가 생성 될 때 watchList_id에 대한 설명이 필요하다. 어떻게 든 user_id == watchList_id를 설정하는 방법을 생각하고 있었지만 어떻게해야할지 확신이 들지 않았습니다. 어떤 아이디어? 필요한 경우 더 많은 코드를 보낼 수 있습니다. 나는 flask-security를 ​​사용하고 있으므로 Register를위한 python/flask 코드를 보는 법을 모르겠습니다.

답변

0

이 방법으로 사용자 지정 방법을 사용해야한다고 생각합니다. 그것은 당신을 위해 유용 할 수 있지만 코드를 실행하지 않아서 당신에 따라 수정할 수 있습니다.

class watchList(db.Model): 
    __tablename__ = "watchList" 

    watchList_id = db.Column(db.Integer, autoincrement=True, 
    primary_key=True) 
    title = db.Column(db.String(200), unique=True) 
    releaseDate = db.Column(db.Date) 
    producer = db.Column(db.String(100)) 
    description = db.Column(db.String(300)) 
    genre = db.Column(db.String(50)) 
    image = db.Column(db.String(300)) 

    @classmethod 
    def create_func(cls, **kw): 
      obj = cls(**kw) 
      #----creating User object with obj(watchList) 

완료하면 알려주세요. 감사합니다.

+0

그래서 다른 클래스 메서드를 호출합니까? User 테이블을 작성하기 위해 작성한 코드는 무엇이든해야합니까? 또한, cls 무엇입니까? – humbleCoder

+0

watchList 객체를 만들면이 메서드를 호출하고 ...... cls를 방문하십시오. https://stackoverflow.com/questions/7554738/python-self-no-self-and-cls – GauravInno

0

세션을 올바르게 사용하는 경우 사용자 생성자에 세션을 추가하는 것처럼 간단합니다. 사용자 생성자가 새 주시 목록 객체를 만들고 매핑 된 관계에 추가합니다. 사용자를 생성하기위한 호출이 커밋되면 둘 다 생성되고 둘 다 해당 시점에 해당 ID를 가져옵니다. 귀하의 코드를 보면, 그것은 나에게 아마 당신은 뒤로 거꾸로 관계가있는 것 같습니다. 주시 목록이 사용자의 소유이면 사용자의 외래 키인 주시 목록에 user_id 열이있는 경우 일반적으로 "주시 목록"에 대해 사용자에 매핑 된 관계가 있습니다. 사용자 당 하나만 있는지 확인하려면 동일한 패턴을 사용할 수 있지만 uselist = False arg를 관계에 전달할 수 있습니다.

그런 다음 사용자 클래스가 수행 할 수 있습니다 아직 수행하지 않은 경우

class User(db.Model, UserMixin): 
    def __init__(self, **kwargs): 
     # set up cols for user 
     for k,v in kwargs.items(): 
      setattr(self, k, v) 
     # create watchlist: watchlist and user will both get their ids 
     # created at the same time when the session creating User 
     # is committed, and watchlist will have the user_id key too 
     self.watchlist = Watchlist() 

나는 우수한 SQLAlchemy의 ORM 튜토리얼을 통해 귀하의 방법을 작동 추천 할 것입니다. 엄지 손가락의 좋은 규칙은 idco를 사용하여 수동으로을 수행해야하는 경우 잘못된 세션을 사용하고 있다는 것입니다. HTH!

관련 문제