2015-07-26 17 views
7

Tôi muốn cập nhật cột được xem lần cuối của người dùng. Để làm được điều mà tôi đang cố gắng mô hình người dùng này:không thể so sánh các khoảng thời gian bù trừ-ngây thơ và bù trừ - tùy chọn last_seen

class User(UserMixin, db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    ... 
    last_seen = db.Column(db.DateTime(timezone=True), default=datetime.datetime.utcnow) 

    def ping(self): 
     self.last_seen = datetime.datetime.utcnow() 
     db.session.add(self) 
     db.session.commit() 

Và mã này chạy luôn khi người dùng thực hiện một số hành động.

@mod.before_app_request 
def before_request(): 
    current_user.ping() 

Đây là lỗi:

TypeError: can't compare offset-naive and offset-aware datetimes 

Làm thế nào tôi có thể giải quyết này? Tôi đang sử dụng postgres và vấn đề được dễ dàng mô phỏng với mã mà tôi đang hiển thị.

Trả lời

10

Tạo một datetime biết (một datetime trong đó có một múi giờ):

import pytz 

self.last_seen = datetime.datetime.utcnow().replace(tzinfo=pytz.UTC) 

Trong trường hợp này bạn sẽ muốn tạo một datetime nhận thức với thời gian hiện tại UTC.

Bạn cần gói pytz cho gói này (gói này chứa thông tin múi giờ mới nhất và thông tin đó không nằm trong thư viện chuẩn của Python).

Các vấn đề liên quan