2017-08-22 5 views
-1

Ich bin auf Flask-SQLalchemy update a row's information folgen, um zu versuchen, ein Objekt in einem Endpunkt zu aktualisieren. Ich habe:TypeError: filter_by() nimmt genau 1 Argument (2 gegeben)

def dashboard_presave_callback(data, existing_id=None): 
    # if existing_id, overwrite...else, make new item 
    print(data) 
    url_to = data.get('url_to', None) 
    print(url_to) 
    if isinstance(url_to, str): 
     pass 
    else: 
     url_to = json.dumps(url_to) 

    if existing_id: 
     data.update({'id': existing_id}) 
     obj = DashboardItem.query.filter_by(id==existing_id).update(data) 
     # obj.update(data) 
    else: 
     obj = DashboardItem(**data) 
     DB.session.add(obj) 

    DB.session.commit() 



class GenericApiView(JsonApiView): 


    # @jwt_required() 
    def post(self, model_type): 
     request_json = request.get_json() 
     dashboard_presave_callback(request_json) 
     return Response({'message': 'ok'}, 200) 

    def put(self, model_type): 
     request_json = request.get_json() 
     existing_id = request_json['id'] 
     del request_json['id'] 
     dashboard_presave_callback(request_json, existing_id) 
     return Response({'message': 'ok'}, 200) 

das Modell sieht aus wie

class DashboardItem(DB.Model): 
    __tablename__ = 'dashboard_item' 

    id = DB.Column(DB.Integer, primary_key=True) 
    user_email = DB.Column(DB.String(200), unique=True, nullable=False) 
    url_to = DB.Column(DB.Text) 
    display_text = DB.Column(DB.String(200), nullable=False) 

    # https://stackoverflow.com/questions/8098122/mongoengine-creation-time-attribute-in-document 
    def save(self, *args, **kwargs): 
     print('huh?') 
     print(args) 
     print(kwargs) 
     self.url_to = 'it worked' 
     return super(DashboardItem, self).save(*args, **kwargs) 

ich es so mache, weil meine save nicht funktioniert hat, aber auf diese Weise ist in Ordnung, weil ich das gleiche Verhalten auf update will.

ich

obj = DashboardItem.query.filter_by(id==existing_id).update(data) 
TypeError: filter_by() takes exactly 1 argument (2 given) 

es scheint, wie ich die gleiche Sache im Beispiel machte. Warum funktioniert das nicht filter_by? Danke

Antwort

3
obj = DashboardItem.query.filter_by(id=existing_id).update(data) 

Sie haben ein zusätzliches = Zeichen so dass es ein boolean geben. filter_by soll nur ein Argument nehmen, das von DashboardItem.query ist. Sie übergeben dies implizit bereits mit der Notation .. Alle anderen Argumente, die Sie angeben müssen, einschließlich id, sind benannte Argumente.

+0

danke. die Kontrollfreaks lassen mich die Antwort für 10 Minuten nicht annehmen :) – codyc4321

+1

@ codyc4321 [Warum kann ich keine Antwort in den ersten 15 Minuten nach dem Stellen der Frage annehmen?] (https://meta.stackoverflow.com/questions/250132/Warum-kann-ich-akzeptiere-eine-Antwort-in-der-ersten-15-Minuten-nach-Frage-die-Frage) –

+0

haha ​​.. keine Sorgen. Bitte schön. Vielleicht später, wenn Sie SO wieder besuchen, können Sie akzeptieren. – Vasif

Verwandte Themen