Python 来自其他字段的mongoengine默认值
我正在为一个项目试用MongoEngine,它非常好。我想知道是否可以从另一个字段为一个字段设置默认值?像这样的Python 来自其他字段的mongoengine默认值,python,mongoengine,Python,Mongoengine,我正在为一个项目试用MongoEngine,它非常好。我想知道是否可以从另一个字段为一个字段设置默认值?像这样的 import mongoengine as me class Company(me.Document): short_name = me.StringField(required=True) full_name = me.StringField(required=True, default=short_name) 此操作失败,出现错误ValidationError
import mongoengine as me
class Company(me.Document):
short_name = me.StringField(required=True)
full_name = me.StringField(required=True, default=short_name)
此操作失败,出现错误ValidationError(公司:无)(StringField仅接受字符串值:['full\u name'])
:编辑:
我没有提到我的应用程序有一个服务层,使我能够简单地这样做:
if company_data['short_name'] is None:
myCompany.full_name = company_data['short_name']
obj = myCompany.save()
它工作得非常好。您可以覆盖文档上的方法:
class Company(me.Document):
short_name = me.StringField(required=True)
full_name = me.StringField()
def save(self, *args, **kwargs):
if not self.full_name:
self.full_name = self.short_name
return super(Company, self).save(*args, **kwargs)
看看:
可以通过将函数传递给字段的默认属性来实现这一点:
class ExampleFirst(Document):
# Default an empty list
values = ListField(IntField(), default=list)
class ExampleSecond(Document):
# Default a set of values
values = ListField(IntField(), default=lambda: [1,2,3])
class ExampleDangerous(Document):
# This can make an .append call to add values to the default (and all the following objects),
# instead to just an object
values = ListField(IntField(), default=[1,2,3])
Mongoengine在循环依赖方面存在一系列问题。这可能是可能的,但您最好还是自己执行此默认设置。这会执行被重写的save
方法的其余部分,如验证和实际插入到集合中吗?@ivica是的,它是通过使用super()
来处理的。不过,最好确保它对您有效-我没有亲自测试过它。我像您说的那样尝试过,它确实插入到了集合中,但没有返回任何内容,而且我无法获取插入文档的_id。@ivica我的错,我缺少return
语句。再试一次。谢谢