【发布时间】:2020-10-28 09:43:55
【问题描述】:
在我的代码中,我有一个模型推文,而在 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 类 TweetSerializer(serializers.ModelSerializer): 元类: 模型 = 推文 fields = ['content', 'date_posted', 'likes']
models.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 模板。有没有办法解决这个问题?
【问题讨论】:
-
是否将
rest_framework添加到INSTALLED_APPS? -
另外,您不需要使用
data参数来序列化模型对象
标签: python django django-rest-framework django-views