我的Django專案中出現了一個非常奇怪的問題。
以下是我的模型:
class Connection(models.Model):
user = models.ForeignKey(User, related_name='exchange_connections', on_delete=models.CASCADE)
exchange = models.ForeignKey(Exchange, related_name='connection_exchange', on_delete=models.CASCADE)
date_created = models.DateTimeField(auto_now_add=True, blank=True, null=True)
last_updated = models.DateTimeField(auto_now=True, blank=True)
下面是我的序列化器:
class ConnectionSer(serializers.ModelSerializer)。
class Meta:
model = Connection
fields = '__all__':model = Connection
而我的視圖:
class UserPortfolioViewSet(views.ModelViewSet)。
serializer_class = ConnectionSer
queryset = Connection.objects.all()
permission_classes = (permissions.IsAuthenticated, core_permissions.IsMineOnly)
def list(self, request)。
try:
user = request.user
except:
return HttpResponseBadRequest('No user'/span>)
connections = user.exchange_connections.all()
return Response(self.serializer_class(connection).data, status=status.HTTP_200_OK)
我從視圖中得到這個錯誤(GET):
在試圖獲取欄位
user的值時,出現了AttributeError。 序列化器ConnectionSer上獲取欄位user的值時,出現了屬性錯誤。該序列化器欄位可能被命名為 不正確,并且與QuerySet上的任何屬性或鍵不匹配。 實體的任何屬性或鍵。原始的例外文本是:'QuerySet'物件沒有 屬性'user'。
這對我來說毫無意義,因為我沒有在我的序列化器類中創建任何交換屬性...?
而且我也不明白最后一行。'QuerySet'物件沒有'user'屬性。
uj5u.com熱心網友回復:
看起來你想根據活動用戶來過濾你的查詢集。你可以覆寫get_queryset方法來做到這一點。此外,你已經在你的ViewSet上有了IsAuthenticated權限類,所以你不需要檢查活動用戶:
class UserPortfolioViewSet(views.ModelViewSet)。
...
def get_queryset(self)。
# get the queryset:: 得到queryset。
queryset = self.queryset
# 獲取活動用戶:
user = self.request.user
# 根據用戶過濾queryset:
queryset = quseryset.filter(user=user)
# return the fitlered queryset:
return queryset
uj5u.com熱心網友回復:
這個錯誤是由于將一個Connection實體的集合/串列傳遞給了序列化器,但沒有標記序列化器使用many=True,所以只需添加這個來防止錯誤:
return Response(self.serializer_class(connection, many=True).data, status=status.HTTP_200_OK)
# ^^^添加這個。
但除此之外,@Daniel的回答將是一個更好的方法,讓ModelViewSet為你處理所有的序列化。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/307452.html
標籤:
