Django:v2.1.5 DRF:v3.9.1 mariaDB:v10.3
嗨,我是 DRF 新手,我一直在 json 领域苦苦挣扎。
DRF 不支持与 mariaDB 一起使用的官方 json 字段类型,即使有 mysql(django-mysql) 的 3rd-party 包但与 mariaDB 不兼容。
所以我搜索并开始实现自定义 jsonfield,它看起来像:
模型.py:
class JSONField(models.TextField):
def to_dict(self, value):
""" convert json string to python dictionary """
return json.loads(value)
def to_json(self, value):
""" convert python dictionary to json string """
return json.dumps(value)
def from_db_value(self, value, expression, connection):
""" convert string from db to python dictionary """
if value is None:
return value
return self.to_dict(value)
def to_python(self, value):
""" convert model input value to python dictionary """
if isinstance(value, dict):
return value
if value is None:
return value
return self.to_dict(value)
def get_prep_value(self, value):
""" convert python dictionary to string before writing to db """
return self.to_json(value)
class Project(models.Model):
objects = models.Manager()
project_user = JSONField(null=True)....
序列化程序.py:
class ProjectSerializer(serializers.ModelSerializer):
class Meta:
model = Project
fields = ('project_code'...)
def create(self, validated_data):
"""
Create and return a new `Project` instance, given the validated data.
"""
return Project.objects.create(**validated_data)
视图.py:
class ListCreateProjectView(APIView):
"""
POST admin/_proj_/
: create a project
"""
def post(self, request, format=None):
serializer = ProjectSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(data=serializer.data)
else:
return Response(data=serializer.errors)
请让我知道我在这里做错了什么或使用 3rd 方包而不是自定义 jsonfield 的方法
非常感谢,祝你们有美好的一天!