django rest api 获取 KeyError: 'image'

问题描述

尝试创建一个基于函数的 post api

views.py:

<div class="card">
<div class="card-body">
<div class="row">
<div class="col-xl-12">
<div class="card-body">
<?PHP 
$arr = array(1,2,3,4,5,6,7,8,9,10);
foreach($arr as $data) {
?>
<div class="form-group row">
<?PHP if($data%2 == 1) { ?>
<label class="col-lg-2 col-form-label font-weight-bold"><?PHP echo $data; ?></label>
<div class="col-lg-4">
<textarea class="form-control" name="<?PHP echo $data; ?>"></textarea>
</div>
<?PHP } else { ?>
<label class="col-lg-2 col-form-label font-weight-bold"><?PHP echo $data; ?></label>
<div class="col-lg-4">
<textarea class="form-control" name="<?PHP echo $data; ?>"></textarea>
</div>
<?PHP } ?>
</div>
<?PHP } ?>
</div>
</div>
</div>
</div>  
</div>

models.py:

@api_view(['POST'])
@permission_classes([IsAuthenticated])
def post_blog(request):
    user = request.user
    data = request.data
    if data['image'] and len(data['image']) == 0:
        blog = Blog.objects.create(
            title=data['title'],description=data['description'],user=user
        )
    else:
        blog = Blog.objects.create(
            title=data['title'],image=data['image'],user=user
        )

    serializer = BlogSerializer(blog)
    return Response(serializer.data)

serializers.py:

class Blog(models.Model):
    blog_id = models.AutoField(primary_key=True,editable=False)
    title = models.CharField(max_length=100,null=False)
    description = models.TextField(null=False)
    image = models.ImageField(null=True,blank=True)
    user = models.ForeignKey(User,on_delete=models.SET_NULL,null=True)
    created_at = models.DateTimeField(auto_Now_add=True)
    updated_at = models.DateTimeField(auto_Now=True)

    def __str__(self):
        return self.title

在对“POST http://localhost:8000/api/blogs/post/”执行发布请求后,我收到此错误

class BlogSerializer(serializers.ModelSerializer):

    class Meta:
        model = Blog
        fields = ['blog_id','title','description','image','user','created_at']

/看起来你的帖子主要是代码;请添加更多详细信息。没有更多细节可以添加/

解决方法

您需要检查 image 是否在 data 中,因此:

if 'image' in data and not data['image']:
    # …

您可能想将其重写为:

if 'image' not in data or not data['image']:
    # …