python - 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
解决方案
您有类型错误,获取 int 而不是字符串更改__str__
为
def __str__(self):
return str(self.id)
或改变
return '<%s: %d>' % (self.__class__.__name__, self.id)