![](/img/trans.png)
[英]How to overwrite get method in Django Rest Framework's API View
[英]Django Rest Framework Api View GET
在我的代碼中,我有一個 model 推文,在 tweet_list_view 中,我想將推文列表顯示為 API 視圖。
@api_view(['GET'])
def tweet_list_view(request, *args, **kwargs):
qs = Tweet.objects.all().order_by('-date_posted')
serializer = TweetSerializer(data=qs, many=True)
return Response(serializer.data)
這就是我得到的結果。
AssertionError at /tweets/
When a serializer is passed a `data` keyword argument you must call `.is_valid()` before attempting to access the serialized `.data` representation.
You should either call `.is_valid()` first, or access `.initial_data` instead.
所以我調用了 .is_valid 方法,如下所示:
@api_view(['GET'])
def tweet_list_view(request, *args, **kwargs):
qs = Tweet.objects.all().order_by('-date_posted')
serializer = TweetSerializer(data=qs, many=True)
if serializer.is_valid():
return Response(serializer.data, status=201)
return Response({}, status=400)
然后我得到:
TemplateDoesNotExist at /tweets/
rest_framework/api.html
在serializers.py class TweetSerializer(serializers.ModelSerializer): class Meta: model = Tweet 字段, 'post'
模型.py
class Tweet(models.Model):
content = models.TextField(blank=True, null=True)
image = models.FileField(upload_to='images/', blank=True, null=True)
user = models.ForeignKey(User, on_delete=models.CASCADE, blank=True, null=True)
date_posted = models.DateTimeField(default=timezone.now)
likes = models.IntegerField(default=0)
def __str__(self):
return self.content
class Meta:
ordering = ['-date_posted']
它正在尋找一個模板,但它應該使用默認的 Django 模板。 有沒有辦法解決這個問題?
更新:
忘記了 api_view 前面的@。 添加它。 還添加了 renderer_class (jsonrenderer) 以確保避免錯誤。
僅當您有 post、put 或 patch 視圖時,才需要使用序列化程序的 data 屬性。 在您的情況下,只需在沒有數據屬性的情況下嘗試它,它應該沒問題
from rest_framework.renderers import JSONRenderer
@api_view(['GET'])
@renderer_classes([JSONRenderer])
def tweet_list_view(request, *args, **kwargs):
qs = Tweet.objects.all().order_by('-date_posted')
serializer = TweetSerializer(qs, many=True)
return Response(serializer.data)
這里可以在官方django rest框架文檔的教程示例中看到
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.