Python Mongoengine Required=True 验证规则不起作用

问题描述

class Song(db.Document):
    # defineing varables 
    Id = db.IntField(min_value = 0,unique=True,required=True)
    songName = db.StringField(unique=True,max_length = 100,required = True)

    def json(self):
        song_dict = {
                        "Id": self.Id,"songName": self.songName
                      }
        return json.dumps(song_dict)
    
    Meta = {
             "indexes": ["Id"],"ordering" :["-date_created"]
             }

## Define route to create database and added the data to the database.
@app.route('/audioMeta',methods=['POST'])
def create_audioMeta():
    #Datetime=datetime.Now()
    try:
        _json = request.json
        if _json['audioFileType'] in audiotypeList:
            audioFileType =_json['audioFileType']
            try:
                record=eval(audioFileType)(**_json['audioFileMetadata'])
                record.save() 
                return Response(response = json.dumps({"message": "Record Added Succesfully"}),status=200)
            except Exception as e:
                return Response(response = json.dumps({"Error" : "Error \n %s" % (e)}),status=400)
        else:
             return Response(response = json.dumps({"message": ""}),status=400)
    except Exception as e:
        return Response(response = json.dumps({"Error" : "Error \n %s" % (e)}),status=400)

我正在定义将 JSON 文件作为数据发布到数据库的路由。使用 mongoengine 库和 python 进行数据库请求。

我已按要求定义了所有字段,但是当我从邮递员发布 JSON 时,它成功上传数据库,尽管缺少几个字段。 喜欢,

喜欢, 正确的要求只有这个......

{"audioFileType": "Song","audioFileMetadata": {"Id":"12123232003","songName":"I wanna grow old with you."
                                                 }
  }

但它也接受了缺少 songName 的情况.....

{"audioFileType": "Song","audioFileMetadata": {"Id":"12123232003"
                                                 }
  }

有什么我遗漏的地方请告诉我...这是我在 StackOverflow 上的第一篇文章,所以如果我犯了任何错误,也请告诉我....

谢谢。

解决方法

我认为这是您的字段定义中的一个简单拼写错误,它是 required=True(小写)而不是 Required=True

补充说明,如果您没有设置以“id”作为名称的属性,MongoEngine 会添加一个字段 id=ObjectIdField(primary_key=True),因此在您的情况下,您实际上同时拥有 idId您的实例。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...