字段名称 user_username 对模型配置文件无效
Posted
技术标签:
【中文标题】字段名称 user_username 对模型配置文件无效【英文标题】:Field name user_username is not valid for model Profile 【发布时间】:2018-03-11 23:50:30 【问题描述】:错误名称:字段名称user_username
对模型Profile
无效
我正在构建我的编辑配置文件视图。
这是我的views.py
class ProfileEditAPIView(DestroyModelMixin, UpdateModelMixin, generics.RetrieveAPIView):
serializer_class = ProfileEditSerializer
def get_queryset(self):
logged_in_user = User.objects.filter(username=self.request.user.username)
return logged_in_user
def get_object(self):
queryset = self.get_queryset()
obj = get_object_or_404(queryset)
return obj.profile
def put(self, request, *args, **kwargs):
return self.update(request, *args, **kwargs)
def delete(self, request, *args, **kwargs):
return self.destroy(request, *args, **kwargs)
我可以正确获取 user_id,但不知何故我无法访问其用户名字段
这是serializers.py
class ProfileEditSerializer(serializers.ModelSerializer):
class Meta:
model = Profile
fields = (
'user_username', <<<
'title',
'gender',
'birth',
'height',
'height_in_ft',
'profile_img',
)
models.py
class Profile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL)
title = models.TextField(max_length=155, blank=True)
gender = models.CharField(max_length=10, choices=GENDER_CHOICES, default='u') # Recommend Factor
location = models.CharField(max_length=40, choices=LOCATION_CHOICES, default='ud') # Recommend Factor
birth = models.DateField(default='1992-07-23', blank=True, null=True) # Recommend Factor
height = models.CharField(max_length=5, default='undefined')
height_in_ft = models.BooleanField(default=True)
profile_img = models.ImageField(
upload_to=upload_location,
null=True,
blank=True)
为什么我们不能访问用户的用户名?我们如何解决这个问题?
谢谢
【问题讨论】:
你能展示你的个人资料模型吗? @MD.KhairulBasar 刚刚编辑了这个问题。谢谢指出 不应该user_username
是 user__username
吗?双下划线?
我也遇到了同样的错误。字段名称user__username
对模型Profile
无效。
很奇怪。不是吗?
【参考方案1】:
您可以使用这种方式从User
模型中获取username
。
class ProfileEditSerializer(serializers.ModelSerializer):
username = serializers.CharField(read_only=True, source="user.username")
class Meta:
model = Profile
fields = (
'username',
'title',
. . . .
)
【讨论】:
几乎..!!因为它是 read_only 你的答案不计入这个问题。如果你检查我的views.py,它有UpdateModelMixin。对不起 @JohnBaek,理想情况下,您不应该提供更改用户名的选项。但如果你想改变,那么只需 removeread_only=True
.【参考方案2】:
尝试像在模型中查看的方式调用用户名,即用户。
变化:
fields = (
'user_username', <<<
'title',
'gender',
'birth',
'height',
'height_in_ft',
'profile_img',
)
收件人:
fields = (
'user',
'title',
'gender',
'birth',
'height',
'height_in_ft',
'profile_img',
)
但如果您希望它在您的 json 响应中显示为用户名,请使用:
class ProfileEditSerializer(serializers.ModelSerializer):
username = serializers.CharField(source='user')
class Meta:
model = Profile
fields = (
'username', <<<
'title',
'gender',
'birth',
'height',
'height_in_ft',
'profile_img',
)
【讨论】:
以上是关于字段名称 user_username 对模型配置文件无效的主要内容,如果未能解决你的问题,请参考以下文章