【问题标题】:Mongoengine signals listens for all modelsMongoengine 信号监听所有模型
【发布时间】:2016-09-22 07:11:03
【问题描述】:

我已经用mongoengine 设置了django 项目,以便将mongodb 与django 一起使用。我已经创建了 2 个模型,它们工作正常,但是当我对一个模型使用信号监听器时,它还会监听另一个模型,那么我怎样才能将信号绑定到它们的模型?

这是我的模型用户代码:

from mongoengine import *
from mongoengine import signals
from datetime import datetime


class User(Document):
    uid = StringField(max_length=60, required=True)
    platform = StringField(max_length=20, required=True)
    index = StringField(max_length=80)
    last_updated = DateTimeField(required=True, default=datetime.now())

    meta = {
        'collection': 'social_users'
    }


def before_save(sender, document, **kwargs):
    if document.platform and document.uid:
        document.index = document.platform+'/'+document.uid

signals.pre_save.connect(before_save)

这是另一个模型Error

from mongoengine import *
from datetime import datetime


class Error(Document):
    call = DictField(required=True)
    response = DictField(required=True)
    date = DateTimeField(default=datetime.now(), required=True)

    meta = {
        'collection': 'errors'
    }

这是我用来测试代码的文件:

from src.social.models.error import Error
from src.social.models.user import User

error = Error.objects.first()

print(error.to_json())

但它不起作用,抛出以下错误:

AttributeError: 'Error' object has no attribute 'platform'

请帮帮我,谢谢。

【问题讨论】:

    标签: python django mongodb mongoengine


    【解决方案1】:

    我找到了一种为特定模型绑定信号的方法,这是我的代码:

    from mongoengine import *
    from mongoengine import signals
    from datetime import datetime
    
    
    class User(Document):
        uid = StringField(max_length=60, required=True)
        platform = StringField(max_length=20, required=True)
        index = StringField(max_length=80)
        last_updated = DateTimeField(required=True, default=datetime.now())
    
        meta = {
            'collection': 'social_users'
        }
    
        @classmethod
        def pre_save(cls, sender, document, **kwargs):
            if document.platform and document.uid:
                document.index = document.platform+'/'+document.uid
    
    signals.pre_save.connect(User.pre_save, sender=User)
    

    希望这对面临同样问题的人有所帮助。

    【讨论】:

      猜你喜欢
      • 2015-03-09
      • 2016-07-16
      • 1970-01-01
      • 2019-08-27
      • 2017-06-02
      • 1970-01-01
      • 2019-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多