【问题标题】:Django rest-framework with mongodb not creating auto field primary key id带有mongodb的Django rest-framework不创建自动字段主键ID
【发布时间】:2021-04-21 22:50:01
【问题描述】:

我正在使用 Django rest 框架在 MongoDB 中保存记录。 迁移如下 -

# Generated by Django 3.0.5 on 2021-01-17 10:39

from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='Demo',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('description', models.CharField(default='', max_length=1000)),
                ('user_id', models.IntegerField()),
                ('published', models.BooleanField(default=False)),
            ],
        ),
    ]

但是 MongoDB 中的记录没有自动创建的 id

{
    "_id" : ObjectId("6004354240e7097e5b392e5c"),
    "description" : "sdf asdaaaaaaaaaaaaaaaaaaaaaaaaaaa ass d",
    "user_id" : 11,
    "published" : false
}

使用serializer.save()插入记录

添加记录的功能如下

def demo_add(request):
user_id=request.user.id
tutorial_data = JSONParser().parse(request)
demo_serializer = DemoSerializer(data=tutorial_data)

if demo_serializer.is_valid():
    demo_serializer.save({"user_id":user_id ,"description":tutorial_data['description']})
    return JsonResponse({"result": True})
return JsonResponse({"result":False,"msg":"Invalid validation"}, status=status.HTTP_400_BAD_REQUEST)

【问题讨论】:

    标签: django django-rest-framework django-views django-forms restframeworkmongoengine


    【解决方案1】:

    Django 已经在后台为您处理好了,所以您不必这样做,如您所见:

    auto_created=True,primary_key=True,serialize=False,verbose_name='ID')

    {
        "_id" : ObjectId("6004354240e7097e5b392e5c"),
        "description" : "sdf asdaaaaaaaaaaaaaaaaaaaaaaaaaaa ass d",
        "user_id" : 11,
        "published" : false
    }
    

    第一行是你的ID,每次创建对象,ID都会不同。

    虽然没有更多的代码很难更具体

    【讨论】:

    • 这是在 mongodb { "_id" : ObjectId("6004354240e7097e5b392e5c"), "description" : "sdf asdaaaaaaaaaaaaaaaaaaaaaaaaaaa ass d", "user_id" : 11, "published" : false } 中生成的记录可以清楚地看到 JSON {} "id" 键没有创建。
    • 使用的代码是 def demo_add(request): user_id=request.user.id tutorial_data = JSONParser().parse(request) demo_serializer = DemoSerializer(data={"user_id":user_id ,"description" :tutorial_data['description']}) if demo_serializer.is_valid(): demo_serializer.save() return JsonResponse({"result": True}) return JsonResponse({"result":False,"msg":"无效验证" }, status=status.HTTP_400_BAD_REQUEST)
    猜你喜欢
    • 2016-11-28
    • 2014-07-28
    • 1970-01-01
    • 2022-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多