Pat*_*Pat 0 django jquery django-rest-framework
我对 Django 很陌生,我使用 Apache Cassandra 作为我的数据库。我在使用 jquery ajax 发送表单时遇到了这个错误。
NotImplementedError at /chatdata/
create()必须实施。
这是我的 serializers.py
from rest_framework import serializers
from .models import Chat
import uuid
from django.utils import timezone
class ChatSerializer(serializers.Serializer):
room_id = serializers.UUIDField()
username = serializers.CharField()
mac = serializers.CharField()
message = serializers.CharField()
created_at = serializers.UUIDField(default=uuid.uuid1())
ts_created = serializers.DateTimeField(default=timezone.now())
class Meta:
fields = '__all__'
Run Code Online (Sandbox Code Playgroud)
这是我的 views.py
from django.shortcuts import render
from django.views.decorators.csrf import csrf_exempt
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .models import Chat, Bulletin
from .serializers import ChatSerializer, BulletinSerializer
class ChatList(APIView):
@csrf_exempt
def get(self, request):
chats = Chat.objects(Chat.room_id == "bbbcb63c-027e-427b-a6e5-b575a79de797").order_by("-created_at")
serializer = ChatSerializer(chats, many=True)
return Response(serializer.data)
@csrf_exempt
def post(self, request):
serializer = ChatSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Run Code Online (Sandbox Code Playgroud)
最后,我的 jquery 发送表单:
$(document).ready(function () {
$('#formchat').on('submit', function(e) {
e.preventDefault();
$.ajax({
url : $(this).attr('action') || window.location.pathname,
type: "POST",
header: {
'Access-Control-Allow-Origin': '*'
},
data: $(this).serialize(),
dataType: 'json',
success: function (data) {
$("#chatinput").val('');
},
error: function (jXHR, textStatus, errorThrown) {
alert(errorThrown);
}
});
});
});
Run Code Online (Sandbox Code Playgroud)
更新: 这是我的models.py
import uuid
from django.utils import timezone
from cassandra.cqlengine import columns
from django_cassandra_engine.models import DjangoCassandraModel
class Chat(DjangoCassandraModel):
room_id = columns.UUID(partition_key=True, default=uuid.uuid4())
username = columns.Text(required=True)
mac = columns.Text(min_length=17, max_length=17, required=True)
message = columns.Text(required=True)
created_at = columns.UUID(primary_key=True, default=uuid.uuid1(), required=True, clustering_order="DESC")
ts_created = columns.DateTime(default=timezone.now())
class Meta:
get_pk_field = 'room_id'
Run Code Online (Sandbox Code Playgroud)
小智 8
使用serializers.ModelSerializer而不是serializers.Serializer
class ChatSerializer(serializers.ModelSerializer):
...fields here
class Meta:
model = Chat
fields = '__all__'
Run Code Online (Sandbox Code Playgroud)
请参阅 Restframework序列化器部分以获取 DRF 指南。
错误来自BaseSerializer
def create(self, validated_data):
raise NotImplementedError('`create()` must be implemented.')
Run Code Online (Sandbox Code Playgroud)
该serializers.Serializer班是源自BaseSerializer它没有实现create()任何一种方法。所以你必须create a create method保存你的模型。或者,考虑改用 ModelSerializer。
| 归档时间: |
|
| 查看次数: |
6883 次 |
| 最近记录: |