2017-08-28 32 views
0

我的models.py是如下,得到用戶ID的用戶名在Django模型

id = models.AutoField(primary_key=True) 
user = AutoOneToOneField(User, primary_key=False,default=1) 
member_name = models.CharField(max_length=25, blank=False, default='') 
ph_no = models.CharField(max_length=25, blank=False, default='') 

我views.py爲GET & POST請求低於,

Class MemberList(generics.ListAPIView): 
    queryset = members.objects.all() 
    serializer_class = MemberSerializer 
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,) 


class MemberCreate(generics.CreateAPIView): 
    queryset = members.objects.all() 
    serializer_class = MemberSerializer 
    permission_classes = (permissions.IsAdminUser,) 

現在在創建數據POST請求工作正常,我提供的用戶值爲「1或2或3等」取決於Django的默認用戶模塊,這些用戶已經創建。

現在,當我做GET請求時,它只會返回用戶ID的數字1或2等。

有什麼辦法,我可以用一些方法來覆蓋,並獲取用戶名,而不是用戶ID在我的GET請求

回答

1

您可以添加到序列化器兩場user_iduser_name。並指定write_onlyread_only參數使用user_id只爲POST或GET請求PUT和user_name

class MemberSerializer(serializers.ModelSerializer): 
    user = serializers.PrimaryKeyRelatedField(write_only=True) 
    user_name = serializers.CharField(source='user.username', read_only=True) 

    class Meta: 
     fields = ('user', 'user_name') 
+0

它說,我必須使用查詢集的說法與下面的錯誤,「Asse田:關係字段必須提供一個'queryset'說法,重寫'get_queryset',或設置read_only ='True'。「 –

+0

@NaggappanRamukannan你需要添加queryset參數到PrimaryKeyRelatedField:'user = serializers.PrimaryKeyRelatedField(write_only = True,queryset = User.objects.all())' – neverwalkaloner

+0

是的,謝謝這是工作正常 –