장고와 함께 작업하기 시작했고 Django Rest Framework 웹 사이트에서 제공하는 자습서를 따랐으며 지금은 튜토리얼을 조금 더 조정하려고합니다. 복잡한.python - DRF 기본 키를 전달하는 데이터를 게시 할 수 없습니다.
소셜 네트워크에 대해 '좋아요'시스템을 만들려고합니다. 사용자는 게시물 (UserPosts)을 만들고 다른 사용자의 게시물을 좋아할 수 있습니다.
나는 (명령 줄을 사용하여) 새로운 UserPosts 이런 식으로 만드는거야 :
http -a admin:Pass1234 POST http://127.0.0.1:8000/posts/ description="I'm just a random comment"
을 그리고 모든 것이 잘 작동합니다. Like 인스턴스를 만들려고 할 때 문제가 발생합니다. 이 경우 나는 UserPost ID를 전달해야합니다, 그래서 새로운 주석 만들처럼 나는 같은 일을 해요 :
http -a admin:Pass1234 POST http://127.0.0.1:8000/likes/ post="1"
을하지만이 작업을 수행 할 때 다음과 같은 오류 얻을 :
"post": {
"non_field_errors": [
"Invalid data. Expected a dictionary, but got unicode."
]
}
을
class UserPost(models.Model):
owner = models.ForeignKey('auth.User', related_name='posts', on_delete=models.CASCADE)
timestamp = models.DateTimeField(auto_now_add=True)
description = models.CharField(max_length=100, blank=True, default='')
def save(self, *args, **kwargs):
options = self.description and {'description': self.description} or {}
super(UserPost, self).save(*args, **kwargs)
class Meta:
ordering = ('timestamp',)
class Like(models.Model):
owner = models.ForeignKey('auth.User', related_name='likes', on_delete=models.CASCADE)
post = models.ForeignKey(UserPost, related_name='likes', on_delete=models.CASCADE)
timestamp = models.DateTimeField(auto_now_add=True)
def save(self, *args, **kwargs):
options = self.post and {'post': self.post}
super(Like, self).save(*args, **kwargs)
class Meta:
ordering = ('timestamp',)
시리얼 :
class UserPostSerializer(serializers.HyperlinkedModelSerializer):
owner = serializers.ReadOnlyField(source='owner.id')
class Meta:
model = UserPost
fields = ('url', 'id', 'description', 'owner', 'timestamp')
class LikeSerializer(serializers.ModelSerializer):
owner = serializers.ReadOnlyField(source='owner.id')
post = UserPostSerializer(source='post')
class Meta:
model = Like
fields = ('id', 'owner', 'post', 'timestamp')
모델은 다음과 같습니다
지도 뷰 :
class PostViewSet(viewsets.ModelViewSet):
queryset = UserPost.objects.all()
serializer_class = UserPostSerializer
permission_classes = (permissions.IsAuthenticatedOrReadOnly,
IsOwnerOrReadOnly,)
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
class LikeViewSet(viewsets.ModelViewSet):
queryset = Like.objects.all()
serializer_class = LikeSerializer
permission_classes = (permissions.IsAuthenticatedOrReadOnly, IsOwnerOrReadOnly,)
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
라우터 및 URL :
router = DefaultRouter()
router.register(r'posts', views.PostViewSet)
router.register(r'users', views.UserViewSet)
router.register(r'likes', views.LikeViewSet)
urlpatterns = [
url(r'^', include(router.urls)),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
무슨 일이 일어나고의 어떤 생각?
감사합니다!