“”“我正在使用DRF创建API(注释)。现在我很困惑,我需要获得一个专辑以便可以完全创建我的api,但是到目前为止,除专辑之外的所有其他字段都出现了。 专辑= serializers.CharField(来源='comments.name_album',read_only = True)没有帮助。这就是我在答案中得到的全部答案{“ album”:“”,“ post”:“ ahsdh”,“ author”:“ philip”,“ text”:“ ahsdhah”}“”“
class AlbumCreateSerializer(serializers.ModelSerializer):
album = serializers.CharField(source='comments.name_album', read_only=True)
class Meta:
model = Comments
fields = [
'album',
'post',
'author',
'text',
]
#apiview
class AlbumCreateAPIView(CreateAPIView):
queryset = Comments.objects.all()
serializer_class = AlbumCreateSerializer
permission_classes = [IsAuthenticated, IsAdminUser]
def post(self, request,pk=None, *args, **kwargs):
serializer = self.serializer_class(data=request.data)
if serializer.is_valid():
ready_data = serializer.save()
return Response(ready_data.data, status=status.HTTP_201_CREATED)
return Response(serializer.data, status=status.HTTP_400_BAD_REQUEST)
#model
class Comments(models.Model):
album = models.ForeignKey(Album, on_delete=models.CASCADE, related_name='comments')
post = models.CharField(max_length=100)
author = models.ForeignKey(User, on_delete=models.CASCADE)
text = models.TextField(max_length=500)
publish_date = models.DateTimeField(default=timezone.now())
def __str__(self):
return self.text
#ajax$
('#post_form').on('submit', function(event){
event.preventDefault();
$.ajax({
type: 'POST',
url: 'http://localhost:8000/api/albums/create/',
data: {
'post': $('#post').val(),
'text': $('#text').val(),
'author': $('#author').val(),
'album': $('#album').val(),
csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val()
},
success: function(data){
console.log(data);
}
});
});
#html form
<form id="post_form" method="post" action="/api/albums/create/">
<input type="hidden" name="csrfmiddlewaretoken">
<input type="hidden" id="author" value="{{ user }}">
<input type="hidden" id="album" value="{{ comments.name_album }}">
<input type="text" id="post"></br>
<input type="text" id="text"></br>
<button>submit</button>
</form>
答案 0 :(得分:0)
您的创建序列化程序应定义一个create
方法,而不要发布。
示例https://www.django-rest-framework.org/api-guide/serializers/#saving-instances
class AlbumCreateAPIView(CreateAPIView):
queryset = Comments.objects.all()
serializer_class = AlbumCreateSerializer
permission_classes = [IsAuthenticated, IsAdminUser]
def create(self, request,pk=None, *args, **kwargs):
serializer = self.serializer_class(data=request.data)
if serializer.is_valid():
ready_data = serializer.save()
return Response(ready_data.data, status=status.HTTP_201_CREATED)
return Response(serializer.data, status=status.HTTP_400_BAD_REQUEST)