我有一个Django REST Framework后端与数据库交互。在我的应用程序中,我想有一个联系人部分,每个用户可以将自己的联系人添加到数据库,但只能看到他们添加的联系人。就目前而言,我可以从数据库中获得任何经过身份验证的用户POST或GET,但它是一个"集体"数据库,每个用户都可以看到彼此的联系人。但是我无法找到如何我这样做。我看到它的方式我有一些概念性的解决方案,但是我没有完全理解我需要实际添加到我的代码中以使其工作。
这是一个简短的views.py联系人:
@api_view(['GET','POST','DELETE' ])
@permission_classes((IsAuthenticated,))
def contacts_list(request):
if (request.method == 'GET'):
contacts = Contact.objects.all()
contacts_serializer = ContactSerializer(contacts, many=True)
return Response(contacts_serializer.data)
elif (request.method == 'POST'):
//post stuff happens here...
elif (request.method == 'DELETE'):
//Delete stuff happens here...
理论解决方案1:为每个联系人添加一个新元素,该联系人属于"属于"标识符。当您提取联系人时,只选择与属于标识符匹配的联系人。
理论解决方案2:创建单独的联系人列表 - 因此当您发布时,您将发布到您自己的列表,当您获得时,您将获得整个列表。
理论解决方案3:找到Django或DRF内置的东西,让它变得更容易......我无法做到的,特别是因为我不知道是什么我正在寻找。
答案 0 :(得分:0)
您的理论解决方案1将是这样做的方法,因为如果您存储创建它的用户,您只能抓取特定用户创建的项目。完成此操作后,您需要按以下步骤更新视图
@api_view(['GET','POST','DELETE' ])
@permission_classes((IsAuthenticated,))
def contacts_list(request):
if (request.method == 'GET'):
contacts = Contact.objects.filter(created_by=request.user)
contacts_serializer = ContactSerializer(contacts, many=True)
return Response(contacts_serializer.data)
elif (request.method == 'POST'):
//post stuff happens here...
elif (request.method == 'DELETE'):
//Delete stuff happens here...