场景:
我目前有两个API。一个RegisterAPI和一个LoginAPI。RegisterAPI注册一个新用户,而LoginAPI仅允许他们访问其详细信息。我也使用了JWT身份验证。
我想从数据库中检索使用DRF中的Login API登录的特定用户的数据。我的意图是与数据库进行交互,但是问题是我的序列化器中有两个模型具有一对一关系,而我对如何继续解决此问题感到困惑。为了获得更清晰的图片,请在下面查看我的代码:
models.py:
from django.db import models
from django.contrib.auth.models import User
class UserData(models.Model):
user = models.OneToOneField(User, on_delete = models.CASCADE)
company = models.CharField(max_length=100, blank=True, null=True)
address = models.TextField()
views.py:
class RegisterAPI(APIView):
permission_classes = [AllowAny]
def post(self, request, format=None):
serializer = UserDataSerializer(data=request.data)
if serializer.is_valid():
content = {
'status': 'Thanks for registering'}
return Response(content, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class LoginAPI(viewsets.ModelViewSet):
permission_classes = [IsAuthenticated]
def list(self, request, *args, **kwargs):
user_id = request.user.id
queryset = User.objects.filter(user = request.user)
user_serializer = UserSerializer(queryset, many = True)
return Response(user_serializer.data)
serializers.py:
from rest_framework import serializers
from users.models import UserData
from django.contrib.auth.models import User
class UserDataSerializer(serializers.ModelSerializer):
class Meta:
model = userData
fields = ('company', 'address')
class UserSerializer(serializers.ModelSerializer):
info = UserDataSerializer()
class Meta:
model = User
fields = ('username', 'email', 'password', 'info')
def create(self, validated_data):
p_data = validated_data['info']
password = validated_data['password', None]
user = User.objects.create(**validated_data)
if password is not None:
user.set_password(password)
user.save()
Profile.objects.create(user = user, **p_data)
return validated_data
urls.py:
from rest_framework.routers import DefaultRouter
from users.views import LoginAPI, RegisterAPI
router = DefaultRouter()
router.register('login_api', LoginAPI, basename = 'login_api')
urlpatterns = [
path('admin/', admin.site.urls),
path('', include(router.urls)),
path('register_api/', RegisterAPI.as_view(), name = 'register_api'),
]
我想在LoginAPI中返回用户的用户名,电子邮件,公司和地址。这些都来自用户和配置文件模型。
例:
{'username' = 'Tim',
'email' = 'tim@company.com',
'company' = 'Riko',
'address' = 'Kenya'}
但是,访问Login API URL时,无法从User模型和Profile模型中检索记录。
我收到此错误:
AttributeError at /login_api/
Got AttributeError when attempting to get a value for field `info` on serializer `UserSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `User` instance.
Original exception text was: 'User' object has no attribute 'info'.**
谁能向我解释哪里出了问题?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。