小编Ane*_*R S的帖子

Django queryset values_list是否返回一个列表对象?

我有一个Django应用程序,用户发布照片,其他人在照片下留下评论.

留下评论时,我需要通知:

  1. 在这个帖子中写道的其他人
  2. 照片的所有者,如果他们不包括在(1)

对于(1),我这样做:

#I slice by 25 because I arbitrarily deem anyone beyond that irrelevant. 
all_commenter_ids = PhotoComment.objects.filter(which_photo=which_photo).order_by('-id').values_list('submitted_by', flat=True)[:25]
Run Code Online (Sandbox Code Playgroud)

接下来,对于(2),我尝试:

all_relevant_ids = all_commenter_ids.append(which_photo.owner_id)
all_relevant_ids = list(set(all_relevant_ids))
Run Code Online (Sandbox Code Playgroud)

我最终得到一个错误:

'ValuesListQuerySet'对象没有属性'append'

我觉得这很奇怪,因为我正在提取一个values_list.

这不是一个列表对象,在这种情况下,该属性不应该append工作吗?请解释什么是错的,并提出替代方案.

django django-models django-orm

18
推荐指数
1
解决办法
2万
查看次数

使用API​​-View在Django-Rest-Framework中进行分页

我目前有一个API视图设置如下:

class CartView(APIView):
    authentication_classes = [SessionAuthentication, TokenAuthentication]
    permission_classes = [IsAuthenticated, ]
    api_view = ['GET', 'POST']

    def get(self, request, format=None):
        try:
            cart = request.user.cart
        except Cart.DoesNotExist:
            cart = Cart.objects.create(user=request.user)
        cart_details = cart.cart_details.all()
        serializer = CartDetailSerializer(cart_details, many=True, fields=['id', 'item', 'quantity', 'product_type'])
        return Response(serializer.data)
Run Code Online (Sandbox Code Playgroud)

CartDetailSerializer是一个普通的ModelSerializer.

我想分页这个API.但是,在DRF的文档中,我发现了这个:

如果您使用常规APIView,则需要自己调用分页API以确保返回分页响应.

没有关于如何对常规APIView API进行分页的示例.

任何人都可以发布一个我可以在上面的场景中使用的例子.

谢谢.

django django-pagination django-rest-framework

12
推荐指数
2
解决办法
1万
查看次数

ProgrammingError:列"X"的类型为double precision,但表达式的类型为numeric []

我正在尝试使用Django Rest Framework和Psycopg2库编写API.此API适用于PostgreSQL数据库.我需要在此数据库中存储2个浮点数组字段,因为API使用2个传感器将数据流式传输到Android应用程序,它们以两个数组存储在APP中,并由JSON发送到API REST.

这些是我的models.py,serializers.py和views_api.py:

Models.py

class DataTest(models.Model):
  patient = models.ForeignKey(Patient)
  label = models.CharField(max_length=36)
  angle_data = ArrayField(models.FloatField())
  emg_data = ArrayField(models.FloatField())
  created_at = models.DateTimeField(auto_now_add=True)
  modified_at = models.DateTimeField(auto_now=True)

  def __unicode__(self):
    return self.patient
Run Code Online (Sandbox Code Playgroud)

Serializers.py

class DataTestSerializer(serializers.Serializer):
  pk = serializers.IntegerField(read_only=True)
  label = serializers.CharField()
  angle_data = serializers.ListField(child=serializers.FloatField())
  emg_data = serializers.ListField(child=serializers.FloatField())
  patient = serializers.PrimaryKeyRelatedField(queryset=Patient.objects.all())

  def create(self, validated_data):
    return DataTest.objects.create(**validated_data)

  def update(self, instance, validated_data):
    instance.label = validated_data.get('label', instance.label)
    instance.angle_data = validated_data.get('angle_data', instance.angle_data)
    instance.emg_data = validated_data.get('emg_data', instance.emg_data)
    instance.patient = validated_data.get('patient', instance.patient)
    instance.save()
    return instance
Run Code Online (Sandbox Code Playgroud)

api.py

class DataTestList(APIView):

  def …
Run Code Online (Sandbox Code Playgroud)

python postgresql precision psycopg2 django-rest-framework

8
推荐指数
1
解决办法
1000
查看次数

序列化程序验证功能不称为 DRF

class ChildSerializer(serializers.ModelSerializer):


    class Meta:
         model = Child
         fields = '__all__'


class ParentSerializer(serializers.ModelSerializer):
    """
    Serializer for task
    """
    def validate_title(self, data):
        if not data.get('title'):
            raise serializers.ValidationError('Please set title')
        return data
Run Code Online (Sandbox Code Playgroud)

Post 时不调用验证函数,另外我如何向 ChildSerializer 提供自定义错误,

python api django django-rest-framework

8
推荐指数
2
解决办法
4287
查看次数

在本地运行spark作业时“没有用于Scheme的文件系统:gs”

我正在运行Spark作业(版本1.2.0),输入的内容是Google Clous存储桶中的文件夹(例如gs:// mybucket / folder)

在Mac机器上本地运行作业时,出现以下错误:

5932 [main]错误com.doit.customer.dataconverter.Phase1-日期作业:2014_09_23失败,错误:方案的无文件系统:gs

我知道要支持gs路径,需要做2件事。一种是安装GCS连接器,另一种是在Hadoop安装的core-site.xml中进行以下设置:

<property>
    <name>fs.gs.impl</name>
    <value>com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem</value>
    <description>The FileSystem for gs: (GCS) uris.</description>
</property>
<property>
    <name>fs.AbstractFileSystem.gs.impl</name>
    <value>com.google.cloud.hadoop.fs.gcs.GoogleHadoopFS</value>
    <description>
     The AbstractFileSystem for gs: (GCS) uris. Only necessary for use with Hadoop 2.
    </description>
</property>
Run Code Online (Sandbox Code Playgroud)

我认为我的问题来自这样一个事实,即我不确定在此本地模式下确切需要在哪里配置每个组件。在Intellij项目中,我正在使用Maven,因此我按以下方式导入了spark库:

<dependency> <!-- Spark dependency -->
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.10</artifactId>
    <version>1.2.0</version>
    <exclusions>
        <exclusion>  <!-- declare the exclusion here -->
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
        </exclusion>
    </exclusions>
</dependency>
Run Code Online (Sandbox Code Playgroud)

和Hadoop 1.2.1,如下所示:

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>1.2.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

问题是,我不确定为Spark配置hadoop的位置,以及配置hadoop conf的位置。因此,我可能添加了错误的Hadoop安装。另外,修改文件后是否需要重新启动?据我所知,我的机器上没有运行Hadoop服务。

hadoop google-cloud-storage apache-spark google-hadoop google-cloud-dataproc

7
推荐指数
2
解决办法
6000
查看次数

Django基于框架组的各个视图的权限

我正在使用DRF编写API.我想为我的Modelviewsets中的每个视图赋予不同的权限.我有两个小组(客户和员工).我在permissions.py中将它们过滤为Isstaff和Iscustomer .

class Iscustomer(permissions.BasePermission):
    def has_permission(self, request, view):
        if request.user and request.user.groups.filter(name='customers'):
            return True
        return False


class Isstaff(permissions.BasePermission):
    def has_permission(self, request, view):
        if request.user and request.user.groups.filter(name='staff'):
            return True
        return False
Run Code Online (Sandbox Code Playgroud)

我试图覆盖使用get_permissions方法.当我放入一个组时self.permission_classes,它工作正常.

class cityviewset(viewsets.ModelViewSet):
    queryset = city.objects.all()
    serializer_class = citySerializer

    def get_permissions(self):    
        if self.request.method == 'POST' or self.request.method == 'DELETE':
            self.permission_classes = [Isstaff]
        return super(cityviewset, self).get_permissions()
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试将多个组放入时self.permission_classes,它会失败.

def get_permissions(self):
    if self.request.method == 'POST' or self.request.method == 'DELETE':
        self.permission_classes = [Isstaff,Iscustomer,]
    return super(cityviewset, self).get_permissions()
Run Code Online (Sandbox Code Playgroud)

django permissions django-permissions django-rest-framework role-based-access-control

7
推荐指数
1
解决办法
3946
查看次数

Django过滤器后端

我正在使用Django rest framework API,我正在尝试通过first_name或last_name或两者都进行过滤。这是我的ContactViewSet.py

class ContactViewSet(viewsets.ModelViewSet):
    queryset = Contact.objects.all()
    serializer_class = ContactSerializer
    filter_backends = (DjangoFilterBackend, )
    filter_fields = ('first_name', 'last_name')
    lookup_field = 'idContact'
Run Code Online (Sandbox Code Playgroud)

我的DRF设置:

REST_FRAMEWORK = {
    'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',),
}
Run Code Online (Sandbox Code Playgroud)

我的actuel请求网址如下所示:

http://localhost:8000/api/v1/contacts/?first_name=Clair&last_name=Test
Run Code Online (Sandbox Code Playgroud)

但是我正在寻找这样的东西:

http://localhost:8000/api/v1/contacts/?first_name=Cl**&last_name=Tes**
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激 ..

python django django-rest-framework django-rest-swagger

7
推荐指数
3
解决办法
8576
查看次数

Django Rest - 创建自定义响应消息时出错

我想实现一个电子邮件验证,我的工作方式似乎"hacky",但似乎工作得很好.我在函数的返回部分创建了一个自定义响应,但是我一直收到以下错误:

The response content must be rendered before it can be iterated over.
Run Code Online (Sandbox Code Playgroud)

该过程是有人注册的标准,当我去保存用户模型时,我有一个send_mail()功能,用验证密钥发送电子邮件.用户单击该链接并传递密钥,如下所示:

/api/account/verify/849c40665175e56709855cc7aec2b16c05a4d977b3b083790334c6bc01f6e522
Run Code Online (Sandbox Code Playgroud)

在视图中,您可以看到我拉出密钥的位置并处理所有内容.我猜的错误是因为我使用Response()get_queryset(),但我不知道.如果没有,我该如何创建自定义响应消息?

版本

Python==2.7.10
Django==1.11.4
djangorestframework==3.6.3
Run Code Online (Sandbox Code Playgroud)

模型

class User(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(_('email address'), null=False, unique=True)
    first_name = models.TextField(_('first name'), null=False)
    last_name = models.TextField(_('last name'), null=False)
    is_active = models.BooleanField(_('active'), default=False)
    is_admin = models.BooleanField(_('admin'), default=False)
    created_on = models.DateTimeField(_('create on'), auto_now_add=True)
    updated_on = models.DateTimeField(_('updated on'), auto_now=True)
    is_staff = models.BooleanField(_('staff'), default=False)
    activation_key = models.CharField(_('email validation key'), default='', max_length=256)
Run Code Online (Sandbox Code Playgroud)

视图

class ActivateViewSet(generics.ListAPIView):

    queryset = …
Run Code Online (Sandbox Code Playgroud)

python django django-rest-framework

7
推荐指数
1
解决办法
4343
查看次数

在Django Rest Framework中将“ _id”附加到外键字段

我有一个像这样的模型:

class MyModel(models.Model):
    thing = models.ForeignKey('Thing')
Run Code Online (Sandbox Code Playgroud)

序列化器和ViewSet如下所示:

class ThingSerializer(serializers.ModelSerializer):

    class Meta:
        model = Thing


class MyModelSerializer(serializers.ModelSerializer):

    class Meta:
        model = MyModel

class MyModelViewSet(viewsets.ModelViewSet):

    queryset = MyModel.objects.all()
    serializer_class = MyModelSerializer
Run Code Online (Sandbox Code Playgroud)

对于MyModel列表端点,DRF返回以下对象:

[ 
    { id: 1, thing: 1 },
    { id: 2, thing: 1 },
    { id: 3, thing: 2 },
    { id: 4, thing: 4 }
]
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉DRF 在仅是ID而非实际相关对象的ForeignKey字段的末尾自动包含“ _id”?例如

[ 
    { id: 1, thing_id: 1 },
    { id: 2, thing_id: 1 },
    { id: 3, thing_id: 2 }, …
Run Code Online (Sandbox Code Playgroud)

django django-rest-framework

6
推荐指数
1
解决办法
1386
查看次数

具有远程 jwt 身份验证的 Django REST

我将创建一个必须是远程用户的 Django REST 项目:外部服务器公开身份验证 api 并使用JWT。它也向我公开了一个不记名令牌以允许我使用 api。我的 Django 将不得不公开 api 以供客户端(移动应用程序)进行身份验证。我不太清楚如何处理身份验证流量:我是否必须构建自定义身份验证?

authentication api django jwt django-rest-framework

5
推荐指数
0
解决办法
945
查看次数