首页 > 解决方案 > Django:上传图像的困难

问题描述

return '<%s: %s>' % (self.__class__.__name__, self)
TypeError: __str__ returned non-string (type int)

这是我通过将此 API 请求发送到服务器得到的:

在此处输入图像描述

我添加了此代码,因为没有它会引发以下错误:

File "/home/dziugas/winteka/winteka/main/serializers.py", line 31, in create
    type=validated_data['type'],
KeyError: 'type'

我用这个修复了它:

if validated_data['user']:
    user = Users.objects.all().filter(pk=validated_data['user'])
    if not user:
        return JsonResponse({'error': 'user was not found'}, status=404)

但正如我所说,我在尝试创建新对象时遇到错误。这是我的序列化器:

class ReportSerializer(serializers.ModelSerializer):
    
    class Meta:
        model = Reports
        fields = ('status', 'type', 'user', 'attached_message', 'attached_photo', 'date_created')

    def create(self, validated_data):

        if validated_data['user']:
            user = Users.objects.all().filter(pk=validated_data['user'])
            if not user:
                return JsonResponse({'error': 'user was not found'}, status=404)

        report = Reports(
            status=validated_data['status'],
            type=validated_data['type'],
            user=user,
            attached_message=validated_data['attached_message'] or None,
            attached_photo=validated_data['attached_photo'],
            date_created=validated_data['date_created'],
        )

这是我的模型:

class Reports(models.Model):
    # Report fundamental stuff
    public_id = models.UUIDField(default=uuid.uuid4, editable=False, unique=True, blank=False, null=False, max_length=36)
    status = models.IntegerField(choices=StatusTypes, blank=False, null=False, default=0)
    type = models.IntegerField(choices=ReportTypes, blank=False, null=False, default=10)

    # User Module
    user = models.ForeignKey(Users, on_delete=models.CASCADE, related_name='+', null=False)
    
    # Post Required Stuff
    reports = models.IntegerField(blank=False, null=False, default=0)
    upvotes = models.IntegerField(blank=False, null=False, default=0)
    downvotes = models.IntegerField(blank=False, null=False, default=0)
    comments = models.ManyToManyField('main.ReportMessages', related_name='+')

    attached_message = models.CharField(max_length=300, null=True, blank=True)
    attached_photo = models.ImageField(null=False, blank=False, default='none.png')
    date_created = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.id

标签: pythondjangodjango-modelsdjango-rest-frameworkdjango-forms

解决方案


您有类型错误,获取 int 而不是字符串更改__str__

def __str__(self):
  return str(self.id)

或改变 return '<%s: %d>' % (self.__class__.__name__, self.id)


推荐阅读