【问题标题】:djongo + mongodb, Array Data Insert Problemdjongo + mongodb,数组数据插入问题
【发布时间】:2022-11-23 09:51:30
【问题描述】:

我有个问题。
堆栈:Django-Rest-Framework + Djongo + Mongodb。
问题:插入错误数组数据

//models.py

from django.db import models
from djongo import models as djongoModels

class House(models.Model):
    house_id = models.CharField(max_length=256)

    class Meta:
        abstract = True

class Users(models.Model):
    _id = djongoModels.ObjectIdField()
    email = djongoModels.CharField(max_length=256)
    name = djongoModels.CharField(max_length=256)
    house = djongoModels.ArrayField(
        model_container=House
    )

    class Meta:
        db_table = "drf_users"
//serializers.py
from .models import Users, Houses
from rest_framework import serializers

class InsertUserSerializers(serializers.ModelSerializer):
    email = serializers.CharField(required=True)
    name = serializers.CharField(required=True)
    house = serializers.ListField(child=serializers.CharField())

    class Meta:
        model = Users
        fields = ('email', 'name', 'house') 

//views.py
from .models import Users
from .serializers import InsertUserSerializers

class UsersViewSet(viewsets.ModelViewSet):
    queryset = Users.objects.all()
    serializer_class = InsertUserSerializers
    permission_classes = [AllowAny]
//request.http
POST http://<domain>/drf/house/ HTTP/1.1
Content-Type: application/json

{
    "email": "test6@stay.co.kr",
    "name": "test6",
    "house": ["SEOU-2023-1023-0002","GYOU-2023-1022-0001"]
}
//pip freeze
asgiref==3.5.2
backports.zoneinfo==0.2.1
certifi==2022.9.24
cffi==1.15.1
charset-normalizer==2.1.1
cryptography==38.0.1
Deprecated==1.2.13
Django==4.1
django-cors-headers==3.13.0
django-filter==22.1
django-oauth-toolkit==2.1.0
django-rest-framework==0.1.0
django-rest-framework-mongoengine==3.4.1
djangorestframework==3.13.1
djongo==1.3.6
dnspython==2.2.1
idna==3.4
jwcrypto==1.4.2
mongoengine==0.24.2
oauthlib==3.2.1
Pillow==9.2.0
pycparser==2.21
pymongo==3.12.3
pytz==2022.2.1
requests==2.28.1
sqlparse==0.2.4
urllib3==1.26.12
wrapt==1.14.1

我想要一个最终的数据库值。 enter image description here

这是序列化程序的问题吗?或者 Djongo 问题。
如果删除序列化程序房屋数组字段,则不会出错。
我的源代码有什么问题。请帮我。

【问题讨论】:

  • 请阐明您的具体问题或提供更多详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: python django mongodb django-rest-framework djongo


【解决方案1】:

[自行解决]
这是模型和值之间的问题。

//ArrayField: Only available {key:value} 
//models.py
class House(models.Model):
    house_id = models.CharField(max_length=256)

class Users(models.Model):
    ...
    house = djongoModels.ArrayField(
        model_container=House
    )

//request value
"house": [{"house_id":"SEOU-2023-1023-0002"},{"house_id":"GYOU-2023-1022-0001"}]
//JSONField or CharField: Available {value, value...} 
//models.py
class Users(models.Model):
    ...
   #house = djongoModels.CharField(max_length=256) <= exists max_length's problem  
    house = djongoModels.JSONField()

//request value
"house": ["SEOU-2023-1023-0002","GYOU-2023-1022-0001"]

【讨论】:

    猜你喜欢
    • 2020-01-31
    • 2011-09-06
    • 2021-02-02
    • 1970-01-01
    • 2020-08-21
    • 1970-01-01
    • 2016-02-05
    • 2011-10-24
    • 2014-03-02
    相关资源
    最近更新 更多