Django: v2.1.5 DRF: v3.9.1 mariaDB: v10.3
Привет, я новичок в DRF, и я боролся с полем json.
DRF не поддерживает официальный тип поля json, работающий с mariaDB, и хотя существует сторонний пакет для mysql (django-mysql), но не совместимый с mariaDB.
Поэтому я искал иначал реализацию пользовательского jsonfield, и он выглядит следующим образом:
model.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)....
serializers.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)
views.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)
пожалуйста, дайте мне знать, что я делаю здесь неправильно или как использовать сторонний пакет, а не пользовательский jsonfield
Большое спасибо и отличного дня, ребята!