Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python “用户”对象没有django rest框架的属性“值”_Python_Django_Django Models_Django Rest Framework_Django Serializer - Fatal编程技术网

Python “用户”对象没有django rest框架的属性“值”

Python “用户”对象没有django rest框架的属性“值”,python,django,django-models,django-rest-framework,django-serializer,Python,Django,Django Models,Django Rest Framework,Django Serializer,我在使用联接表序列化数据时遇到问题。我这样做对吗?我只是django的新手 这是我的模特 from django.db import models from django.contrib.auth.models import AbstractBaseUser class Agency(models.Model): agency_id = models.CharField(primary_key=True, max_length=50) agency_shortname = mo

我在使用联接表序列化数据时遇到问题。我这样做对吗?我只是django的新手

这是我的模特

from django.db import models
from django.contrib.auth.models import AbstractBaseUser

class Agency(models.Model):
    agency_id = models.CharField(primary_key=True, max_length=50)
    agency_shortname = models.CharField(max_length=20, blank=True, null=True)
    agency_longname = models.CharField(max_length=255, blank=True, null=True)
    date_created = models.DateTimeField(blank=True, null=True)

        class Meta:
            managed = False
            db_table = 'agency'

class Users(AbstractBaseUser):
    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = []
    user_id = models.CharField(primary_key=True, max_length=50)
    first_name = models.CharField(max_length=50, blank=True, null=True)
    middle_name = models.CharField(max_length=50, blank=True, null=True)
    last_name = models.CharField(max_length=50, blank=True, null=True)
    username = models.CharField(unique=True, max_length=50, blank=True, null=True)
    password = models.CharField(max_length=100, blank=True, null=True)
    agency = models.OneToOneField(Agency, models.DO_NOTHING)
    date_created = models.DateTimeField(blank=True, null=True)
    active = models.CharField(max_length=8)
    login_status = models.CharField(max_length=6)
    last_login = models.DateTimeField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'users'
然后在我的serializers.py中

   from rest_framework import serializers
   from .models import Users, Agency

   class UserDetailSerializer(serializers.ModelSerializer):
       class Meta: 
           model = Users
           fields = '__all__'

   class AgencyDetailSerializer(serializers.ModelSerializer):
       agency_id = UserDetailSerializer()
       class Meta:
           model = Agency
           fields = ['agency_id','agency_shortname','agency_longname']
还有我的观点

   from rest_framework.decorators import api_view, permission_classes
   from rest_framework.response import Response
   from .serializers import UserDetailSerializer
   from .models import Users, Agency
   from rest_framework.permissions import IsAuthenticated

   @api_view(['GET'])
   @permission_classes([IsAuthenticated])
   def userData(request):
       username = request.GET.get('username')
       r_type    = request.GET.get('type')

       user = Users.objects.get(username=username).values('user_id','first_name','middle_name','last_name','username','email','agency__agency_id','agency__agency_shortname','agency__agency_longname')
       user_serializer = UserDetailSerializer(user, many=False)

       return Response(user_serializer.data)
我得到一个“用户”对象没有属性“值”的错误,这是什么问题?我正在使用vue.js和django rest框架构建基于api的应用程序。非常感谢

get queryset没有values属性,而是使用filter

就您的情况而言,使用get就足够了,您可以像这样自定义序列化程序:

class UserDetailSerializer(serializers.ModelSerializer):
    class Meta: 
        model = Users
        fields = '__all__'
    agency = AgencyDetailSerializer(many=False, read_only=True)
get queryset没有值属性,而是使用筛选器

就您的情况而言,使用get就足够了,您可以像这样自定义序列化程序:

class UserDetailSerializer(serializers.ModelSerializer):
    class Meta: 
        model = Users
        fields = '__all__'
    agency = AgencyDetailSerializer(many=False, read_only=True)

因为值不是模型对象的属性。您可以调用queryset对象上的值。比如:

user = Users.objects.filter(username=username).values('user_id','first_name','middle_name','last_name','username','email','agency__agency_id','agency__agency_shortname','agency__agency_longname')
注意:您不需要调用值,只需将此行更改为:
因为序列化程序本身将为您处理它。

因为值不是模型对象的属性。您可以调用queryset对象上的值。比如:

user = Users.objects.filter(username=username).values('user_id','first_name','middle_name','last_name','username','email','agency__agency_id','agency__agency_shortname','agency__agency_longname')
注意:您不需要调用值,只需将此行更改为:
因为序列化程序本身将为您处理它。

我尝试过,但它说,您将序列化程序实例作为数据传递,但可能是要传递serialized.data`或.error。对于您的情况,只需要使用get,然后使用序列化程序来显示响应就足够了!不需要使用值,但它不会返回代理模型中的字段刚更新了我的答案,您需要自定义序列化程序以获取代理数据我可以问一个问题吗?.getcol='Foo'是否等效于'SELECT*FROM table WHERE col='Foo'?我已经尝试过了,但它说,您传递了一个序列化程序实例作为数据,但可能是要传递serialized.data`或.error。对于您的情况,只需要使用get,然后使用序列化程序来显示响应就足够了!不需要使用值,但它不会返回代理模型中的字段刚更新了我的答案,您需要自定义序列化程序以获取代理数据我可以问一个问题吗?.getcol='Foo'是否等效于从col='Foo'所在的表中选择*的查询?出现此错误,您将序列化程序实例作为数据传递,但可能是要传递序列化的.data`或.error。表示。`出现此错误,您将序列化程序实例作为数据传递,但可能是要传递serialized.data`或.error。代表性`