I am doing basic message app for users can send message other user...
here my 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'
here my rest api views
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
And my Serializers
class MessageSerializer(ModelSerializer):
sender = UserMobileSerializer(read_only=True)
target = UserMobileSerializer()
class Meta:
model = Messages
fields = '__all__'
When I send a message then return this error:
line 163, in perform_create target_email = serializer.validated_data['target']['email']
TypeError: 'User' object is not subscriptable
[28/Apr/2018 18:56:04] "POST /api/v1/message/ HTTP/1.1" 500 15742
My usermodel use
USERNAME_FIELD = 'email'
not use username field
validated_data['target'] gives you the value of the target field - which, as the error says, is an instance of User. You use normal attribute syntax to access its fields.
target_email = serializer.validated_data['target'].email
I was using fastapi.
class UserDetails(BaseModel):
email: str
price: int
@app.post ("/create_checkout_session/")
async def create_checkout_session(user_details:UserDetails):
price = user_details.price
I got this error:
price = user_details['price']
TypeError: 'UserDetails' object is not subscriptable
Instead of passing key I used dot operator (.) to access value:
price = user_details.price
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With