django - TypeError:“用户”对象不可下标
问题描述
我正在做基本的消息应用程序,用户可以向其他用户发送消息......
这是我的models.py
class Messages(Model):
created_at = DateTimeField(null=True, blank=True, auto_now_add=True, editable=False,
verbose_name='Yaratılma Tarihi')
message = TextField(max_length=500, verbose_name='Mesaj', null=True, blank=True, )
sender = ForeignKey('dentis.User', verbose_name='Gönderen', related_name='User')
target = ForeignKey('dentis.User', verbose_name='Alıcı', related_name='target')
read_at = BooleanField(default=False, verbose_name='Okundu', blank=True, )
class Meta:
verbose_name = 'Mesaj'
verbose_name_plural = 'Mesajlar'
def __str__(self):
return u'%s / %s/' % (self.sender.email, self.message[:15])
def get_type(self):
return 'message'
这是我的休息 api 意见
class MessageAPIView(ModelViewSet):
serializer_class = MessageSerializer
filter_backends = (filters.DjangoFilterBackend,)
filter_class = MessageUserFilter
permission_classes = (AuthenticatedUserOnly,)
def get_user(self):
if self.request.user.is_authenticated():
return self.request.user
else:
raise Http404
def get_queryset(self):
messages = Messages.objects.filter(
Q(sender=self.get_user()) | Q(target=self.get_user())).order_by('-created_at').distinct()
return messages
def perform_create(self, serializer):
if self.request.user.is_authenticated():
try:
target_email = serializer.validated_data['target']['email']
target = User.objects.get(email=target_email)
except User.DoesNotExist:
raise ValidationError('Hedef Kullanıcı bulunamadı')
except KeyError:
raise ValidationError('Hedef kullanıcı belirtilmedi')
sender = self.request.user
serializer.save(sender=sender, target=target)
else:
raise Http404
还有我的序列化器
class MessageSerializer(ModelSerializer):
sender = UserMobileSerializer(read_only=True)
target = UserMobileSerializer()
class Meta:
model = Messages
fields = '__all__'
当我发送消息时,返回此错误:
第 163 行,在 perform_create target_email = serializer.validated_data['target']['email']
TypeError:“用户”对象不可下标
[28/Apr/2018 18:56:04]“POST /api/v1/message/HTTP/1.1”500 15742
我的用户模型使用
USERNAME_FIELD = '电子邮件'
不使用用户名字段
解决方案
validated_data['target']
为您提供目标字段的值 - 正如错误所说,它是 User 的一个实例。您可以使用普通属性语法来访问其字段。
target_email = serializer.validated_data['target'].email
推荐阅读
- r - R ggplot2:如何改变点的粗细?
- google-colaboratory - 谷歌 Colab TPU / 无
- numpy - Numpy:prod,溢出到底是什么?
- facebook - Instagram 或 Facebook 如何为每个用户创建一个页面?{instagram.com/USERNAME}
- java - 在 Java EE 中的托管可调用任务中重写的参数
- r - 使用 R 中的图形标题获取数据框列名称
- javascript - 将 iframe 插入到 png 顶部的特定位置
- assembly - 来自 Wikibooks 的这个简单的 x86 汇编函数调用代码片段发生了什么?
- html - 对 flexbox flex-basis 和 width 真的很困惑
- sql - 一次同时运行单个 T-SQL 脚本的各个部分的最佳方式