小编tup*_*pan的帖子

Django使用自定义API视图进行框架分页

我试图在我的项目中添加分页,找不到任何明确的文档或教程.

我有一份办公室名单

模型Office.py

class Office(Model):
    name = CharField(_("name"), default=None, max_length=255, null=True)
    email = EmailField(_("email"), default=None, max_length=255, null=True)
    description = TextField(_("description"), default=None, null=True)
Run Code Online (Sandbox Code Playgroud)

串行

class OfficeSerializer(ModelSerializer):
     id = IntegerField(read_only=True)
     name = CharField(read_only=True)
     email = URLField(read_only=True)
     description = CharField(read_only=True)

class Meta:
    model = Office
    fields = ("id", "name", "email", "description")
Run Code Online (Sandbox Code Playgroud)

views.py

@api_view(["GET"])
@permission_classes((AllowAny,))
def offices(request):
    instance = Office.objects.filter()[:10]
    serializer = OfficeSerializer(instance, many=True)

    return Response(serializer.data)
Run Code Online (Sandbox Code Playgroud)

使用分页返回Office列表的任何帮助?

python django pagination django-rest-framework

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

Django-Rest-Framework:Paginate嵌套对象

我有两个型号:

class Book(models.Model):
    title = models.CharField(max_length=250)
    author = models.CharField(max_length=250)
class WordInBook(models.Model):
    book = models.ForeignKey("Book")
    word = models.ForeignKey("Word")
Run Code Online (Sandbox Code Playgroud)

和相应的序列化器:

class BookSerializer(ModelSerializer):
    wordinbook_set = WordInBookSerializer(many=True)

    class Meta:
        model = Book
        fields = ('id', 'title', 'author', 'wordinbook_set')

class WordInBookSerializer(ModelSerializer):
    class Meta:
        model = WordInBook
        fields = ('word')
Run Code Online (Sandbox Code Playgroud)

现在我想分页wordinbook_set.在序列化器之外很容易:

book = Book.objects.get(pk=book_id)
paginator = Paginator(book.wordinbook_set.all(), 10)
words = paginator.page(page).object_list
Run Code Online (Sandbox Code Playgroud)

但这留下了两个独立的序列化对象.

问题:如何在序列化器中对wordinbook_set进行分页?
生成的json应如下所示:

{id: '...', title: '...', author: '...', wordinbook_set: [ 10 WordInBook objects here ]}
Run Code Online (Sandbox Code Playgroud)

django serialization pagination django-rest-framework

6
推荐指数
2
解决办法
1530
查看次数

使用LLVM创建本地字符串

我正在尝试使用LLVM创建一个本地变量来存储字符串,但我的代码目前正在抛出语法错误.

lli: test2.ll:8:23: error: constant expression type mismatch
  %1 = load [6 x i8]* c"hello\00"
Run Code Online (Sandbox Code Playgroud)

我的IR代码分配和存储字符串:

@.string = private constant [4 x i8] c"%s\0A\00"

define void @main() {
entry:
  %a = alloca [255 x i8]
  %0 = bitcast [255 x i8]* %a to i8*
  %1 = load [6 x i8]* c"hello\00"
  %2 = bitcast [6 x i8]* %1 to i8*
  %3 = tail call i8* @strncpy(i8* %0, i8* %2, i64 255) nounwind
  %4 = getelementptr inbounds [6 x i8]* %a, …
Run Code Online (Sandbox Code Playgroud)

llvm llvm-ir

5
推荐指数
1
解决办法
1084
查看次数

使用distinct后如何执行order_by?

我想根据两个字段获取唯一的结果后对结果进行排序。我遇到的问题是我无法在Django中使用两个ord​​er_by。每当您使用此功能时,Django都会清除前一个order_by()

每个order_by()调用都会清除以前的所有顺序。

型号示例:

class Product(models.Model):
    price = models.FloatField()
    name = models.CharField(max_length=100)
    group = models.CharField(max_length=100)
Run Code Online (Sandbox Code Playgroud)

我想获得同一组中价格最低的产品。然后,我想按价格对它们进行排序。像这样:

Product.objects.order_by('group','price').distinct('group').order_by('price')
Product.objects.order_by('group','price').distinct('group').order_by('-price')
Run Code Online (Sandbox Code Playgroud)

问题是,如果仅按一阶使用,我会得到不同的产品。

-

编辑

表示例:

id | name | group | price
0  | aaa  | aaa   | 10.0
1  | aaa  | aaa   | 1.0
2  | aaa  | aaa   | 2.0
3  | aaa  | aaa   | 1.0
4  | bbb  | bbb   | 2.0
5  | bbb  | bbb   | 2.1
6  | bbb  | bbb   | …
Run Code Online (Sandbox Code Playgroud)

django django-orm python-3.x

5
推荐指数
2
解决办法
1214
查看次数

Django admin 使用带有多对多字段的 TabularInline 很慢

我正在尝试使用 Django admin 在一个请求中可视化所有样本。它有效,但它真的很慢。我尝试使用prefetch, formset, raw_id_fields, 并且readonly_fields没有运气。当我加载超过 10 个样本时,它仍然很慢。我在这里遇到了 N+1 问题。我检查了 Django 调试工具栏,它对该请求中的每个示例进行了查询。

这是我的模型:

# This is where the sample has all information
class Inventory(models.Model):
    sample_id = models.CharField(max_length=50, primary_key=True)

    def __str__(self):
        return '{0}'.format(self.sample_id)

# Intermediate model
class SampleRequestInventory(models.Model):
    sample = models.ForeignKey("Inventory", on_delete=models.CASCADE)
    request = models.ForeignKey("SampleRequest", on_delete=models.CASCADE)

# This is the request model that I'm looking  
class SampleRequest(models.Model):
    samples = models.ManyToManyField("Inventory", through="SampleRequestInventory")
Run Code Online (Sandbox Code Playgroud)

这是我的 Django 管理员配置:

class SamplesInline(admin.TabularInline):
    model = SampleRequestInventory
    # raw_id_fields = ('sample',)
    readonly_fields …
Run Code Online (Sandbox Code Playgroud)

django django-admin

5
推荐指数
1
解决办法
1792
查看次数

Django在另一列中“分组依据”之后的一列的总和值

我在这里和django文档中找到了一些解决方案,但是我无法以我想要的方式使一个查询工作。

我有以下模型:

class Inventory(models.Model):
    blindid = models.CharField(max_length=20)
    massug = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)

我想计算Blind_ID的数量,然后将它们分组后的质量。

我目前的Django ORM

samples = Inventory.objects.values('blindid', 'massug').annotate(aliquots=Count('blindid'), total=Sum('massug'))
Run Code Online (Sandbox Code Playgroud)

它计数不正确(仅显示一个),因此计数不正确。这似乎是只得到第一个结果......我试着用Count('blindid', distinct=True)Count('blindid', distinct=False)为好。

这是使用的查询结果samples.query。Django按两列分组...

SELECT "inventory"."blindid", "inventory"."massug", COUNT("inventory"."blindid") AS "aliquots", SUM("inventory"."massug") AS "total" FROM "inventory" GROUP BY "inventory"."blindid", "inventory"."massug"
Run Code Online (Sandbox Code Playgroud)

这应该是原始sql

SELECT blindid, 
       Count(blindid) AS aliquots,
       Sum(massug) AS total
       FROM inventory 
       GROUP BY blindid
Run Code Online (Sandbox Code Playgroud)

django django-models

4
推荐指数
1
解决办法
2293
查看次数

熊猫 reset_index() 创建 level0 列

我正在阅读一个CSV文件,消除重复项并导出到数据库。

这里的问题是它正在创建一个名为 level0而不是重置索引。

这是我的代码

df = pd.read_csv('SampleData.csv', sep=';', encoding='latin1',  low_memory=False)
df_projects = df['External'].drop_duplicates()
df_projects = df_projects.to_frame()
df_projects.rename(columns={'External': 'name'}, inplace=True)
df_projects = df_projects.reset_index()

con = create_engine('sqlite:///db.sqlite3')
df_projects.to_sql("inventory_projects", con, index=True, if_exists='replace')
Run Code Online (Sandbox Code Playgroud)

sql duplicates multiple-columns python-3.x pandas

3
推荐指数
1
解决办法
4237
查看次数

Pandas检查另一个数据帧中是否存在行并追加索引

我有一个问题要迭代我的数据帧.我正在做的方式是花费一些时间,我没有那么多行(我有300k行)

我想做什么?

  1. 检查一个DF(A)是否包含另一个DF(B)的两列的值.您可以将其视为多个关键字段

  2. 如果为True,则获取DF.B的索引并分配给DF.A的一列

  3. 如果为False,则有两个步骤:

    一个.附加到DF.B找不到两列

    湾 将新ID分配给DF.A(我不能这样做)

这是我的代码,其中:

  1. df是DF.A,df_id是DF.B:

  2. SampleID和ParentID是我有兴趣检查它们是否存在于两个数据帧中的两列

  3. Real_ID是我想要分配DF.B(df_id)的id的列

    for index, row in df.iterrows():
        #check if columns exist in the other dataframe
        real_id = df_id[(df_id['SampleID'] == row['SampleID']) & (df_id['ParentID'] == row['ParentID'])]
    
        if real_id.empty:
            #row does not exist, append to df_id
            df_id = df_id.append(row[['SampleID','ParentID']])
        else:
            #row exists, assign id of df_id to df
            row['Real_ID'] = real_id.index
    
    Run Code Online (Sandbox Code Playgroud)

例:

DF.A(df)

   Real_ID   SampleID   ParentID  Something AnotherThing
0             20          21          a          b      
1             10          11          a          b      
2             40          51          a          b …
Run Code Online (Sandbox Code Playgroud)

python pandas

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

为控制器创建基类以在Ember应用程序中扩展/继承

我正在尝试为我的控制器创建一个基类,因此可以避免重复代码。

这里的问题是,每当我尝试使用它时,都会抛出错误。

“断言失败:您试图定义a {{link-to "inventory"}},但未传递生成其动态分段所需的参数。找不到controllers/base-inventoryfrontend/controllers/inventory” 导入的模块

为了创建我的基本控制器,我使用了ember cli,这就是我所做的:

ember g controller base-inventory
Run Code Online (Sandbox Code Playgroud)

然后

// base-inventory.js
const BaseInventory = Ember.Controller.extend({
   //my code...
});
export default BaseInventory;
Run Code Online (Sandbox Code Playgroud)

在我想使用该基类的控制器中,执行了以下操作

import BaseInventory from 'controllers/base-inventory';
// also tried import { BaseInventory } from 'controllers/base-inventory';
// and  export default new BaseInventory({});
export default BaseInventory.extend({
    //more code here...
});
Run Code Online (Sandbox Code Playgroud)

有什么想法我做错了吗?

我不打算使用mixins,因为一开始它似乎并不是最好的选择。我不太确定mixin提供的共享内容。我认为这不是问题,因为我正在尝试在控制器中进行继承,但是正如我所说的,我不确定它的真正工作原理。

如果无法按照我想的方式做,我将编写一个mixin。

javascript ember.js ember-cli

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

覆盖 django admin 中的模板

我正在使用 Django 1.11

  1. 我能够扩展/覆盖一个名为change_form.html

    我把这个文件放在下面/templates/admin/my_app/my_model/

    对于这一点,我扩展并更改了一个块,就像django 文档中的示例一样

  2. 我无法覆盖一个名为submit_line.html

    我尝试将其放在/templates/admin//templates/admin/my_app/、 和下/templates/admin/my_app/my_model/。没有一个起作用。

    我编辑了下面的文件django/contrib并且它有效,但我不想更改该文件。只是为了看看内容是否显示。

我只想向模板添加一个按钮,以便用户可以下载一个 XML 文件。

python django templates

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

使用 IN 和列表进行 SQL 查询非常慢

有没有办法优化这样的查询:

SELECT count(*) FROM mytable 
WHERE 
indexed_field IN ('v1', 'v2', ..., 'v2000')
AND NOT regular_field='something'
AND other_regular_field='something_else';
Run Code Online (Sandbox Code Playgroud)

这个查询“有效”。问题是它非常慢(1分钟以上)。我认为使用IN定义的列表来使用表达式就可以了,但事实证明并不是那么好。

我正在使用 Postgresql 9.6。

我的表有310K。

查询解释:

QUERY PLAN
Aggregate  (cost=396158.70..396158.71 rows=1 width=8) (actual time=8630.558..8630.559 rows=1 loops=1)
  ->  Seq Scan on mytable  (cost=0.00..396156.77 rows=772 width=0) (actual time=7853.840..8630.478 rows=916 loops=1)
        Filter: (((non_indexed_field)::text <> 'value1'::text) AND ((non_indexed_field)::text = 'value2'::text) AND ((indexed_field)::text = ANY ('{lots and lots of values....}'::text[])))
        Rows Removed by Filter: 306768
Planning time: 2.543 ms

Execution time: 8630.770 ms
Run Code Online (Sandbox Code Playgroud)

通过分析、缓冲:

Aggregate  (cost=396158.70..396158.71 …
Run Code Online (Sandbox Code Playgroud)

sql postgresql

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