Среда Django REST: как я могу связываться с другой моделью в запросе POST? - PullRequest
0 голосов
/ 08 декабря 2018

Я действительно новичок в создании API и могу многое понять неправильно.Я хочу связать объект с другой моделью в запросе POST, как при публикации в виде данных формы на реальном сайте.Как я могу сделать, используя rest framework?

мое представление API выглядит следующим образом:

@api_view(['GET', 'POST'])
def list_comment(request, pk):
"""
List all comments that belong to an entry or add a comment to the entry
"""
    entry = get_object_or_404(Entry, id=pk)
    comments = Comment.objects.filter(entry=entry)

    if request.method == 'GET':
        serializer = CommentSerializer(comments, many=True)
        return Response(serializer.data)

    elif request.method == 'POST':
        serializer = CommentSerializer(data=request.data)
        # I want to associate the comment with 'entry' here
        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)

Кроме того, форма страницы остального фреймворка довольно сложно экспериментировать, и яхочу изменить его, чтобы сформировать.Как я могу это изменить?Даже если я выберу данные формы, форма содержимого не изменится.

1 Ответ

0 голосов
/ 09 декабря 2018

Вы можете использовать метод create в классе сериализатора и создавать там действие,

Это пример с www.django-rest-framework.org

class CommentSerializer(serializers.Serializer):
    email = serializers.EmailField()
    content = serializers.CharField(max_length=200)
    created = serializers.DateTimeField()

    def create(self, validated_data):
        return Comment(**validated_data)

    def update(self, instance, validated_data):
        instance.email = validated_data.get('email', instance.email)
        instance.content = validated_data.get('content', instance.content)
        instance.created = validated_data.get('created', instance.created)
        return instance
...