Как сохранить запрос заголовка с помощью REST framework - PullRequest
0 голосов
/ 14 июля 2020

Я использую django 3.0.7 и Django Rest Framework

мой models.py выглядит так:

class BlogPost(models.Model):
        title                           = models.CharField(max_length=50, null=False, blank=False)
        body                            = models.TextField(max_length=5000, null=False, blank=False)
        header                          = models.TextField(max_length=5000, null=False, blank=False)
        image                           = models.ImageField(upload_to=upload_location, null=False, blank=False)
        date_published          = models.DateTimeField(auto_now_add=True, verbose_name="date published")
        date_updated            = models.DateTimeField(auto_now=True, verbose_name="date updated")
        author                          = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
        slug                            = models.SlugField(blank=True, unique=True)

        def __str__(self):
                return self.title

serializers.py:

class BlogPostSerializer(serializers.ModelSerializer):

    class Meta:
        model = BlogPost
        fields = ['title', 'body', 'image', 'date_updated', 'username']

views.py:

@api_view(['POST'])
def api_create_blog_view(request):

    blog_post = BlogPost(author=request.user)

    if request.method == 'POST':
        serializer = BlogPostSerializer(blog_post, data=request.data)
        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)

Мне нужно сохранить заголовок в поле базы данных «header», я пытался сохранить как-то так:

serializer = BlogPostSerializer(blog_post, data=request.data, header=request.META)

но не работает

1 Ответ

1 голос
/ 14 июля 2020

То, что вы делаете, идет по правильному пути.
HttpRequest.META дает словарь, содержащий все доступные заголовки HTTP. Вы также можете использовать HttpRequest.headers, это более простой способ доступа ко всем заголовкам с префиксом HTTP, плюс CONTENT_LENGTH и CONTENT_TYPE.

Вы можете сохранить значение после проверки is_valid().

@api_view(['POST'])
def api_create_blog_view(request):

    blog_post = BlogPost(author=request.user)

    if request.method == 'POST':
        serializer = BlogPostSerializer(blog_post, data=request.data)
        data = {}
        if serializer.is_valid():
            serializer.save(header=request.headers)
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
...