小编fun*_*man的帖子

将Django Model对象转换为dict,所有字段都保持不变

如何将django Model对象转换为包含其所有字段的dict ?理想情况下,所有内容都包含外键和带有editable = False的字段.

让我详细说明一下.假设我有一个类似以下的django模型:

from django.db import models

class OtherModel(models.Model): pass

class SomeModel(models.Model):
    normal_value = models.IntegerField()
    readonly_value = models.IntegerField(editable=False)
    auto_now_add = models.DateTimeField(auto_now_add=True)
    foreign_key = models.ForeignKey(OtherModel, related_name="ref1")
    many_to_many = models.ManyToManyField(OtherModel, related_name="ref2")
Run Code Online (Sandbox Code Playgroud)

在终端中,我做了以下事情:

other_model = OtherModel()
other_model.save()
instance = SomeModel()
instance.normal_value = 1
instance.readonly_value = 2
instance.foreign_key = other_model
instance.save()
instance.many_to_many.add(other_model)
instance.save()
Run Code Online (Sandbox Code Playgroud)

我想将其转换为以下字典:

{'auto_now_add': datetime.datetime(2015, 3, 16, 21, 34, 14, 926738, tzinfo=<UTC>),
 'foreign_key': 1,
 'id': 1,
 'many_to_many': [1],
 'normal_value': 1,
 'readonly_value': 2}
Run Code Online (Sandbox Code Playgroud)

回答不满意的问题:

Django:将一整套Model的对象转换为单个字典

如何将Django Model对象转换为字典并仍然拥有其外键?

python django dictionary django-models

215
推荐指数
8
解决办法
14万
查看次数

Django查询从不同类别获取最新对象

我有两个型号AB.所有B对象都有一个对象的外键A.给定一组A对象,无论如何都要使用ORM来获取B包含为每个A对象创建的最新对象的一组对象

这是一个简化的例子:

class Bakery(models.Model):
    town = models.CharField(max_length=255)

class Cake(models.Model):
    bakery = models.ForeignKey(Bakery, on_delete=models.CASCADE)
    baked_at = models.DateTimeField()
Run Code Online (Sandbox Code Playgroud)

所以我正在寻找一个可以返回美国Anytown每家面包店最新蛋糕的查询.

python django django-queryset greatest-n-per-group

72
推荐指数
4
解决办法
2万
查看次数

Django聚合:两个字段的乘法求和

我有一个这样的模型

class Task(models.Model):
    progress = models.PositiveIntegerField()
    estimated_days = models.PositiveIntegerField()
Run Code Online (Sandbox Code Playgroud)

现在我想Sum(progress * estimated_days)在数据库级别进行计算.使用Django聚合我可以得到每个字段的总和,但不能得到字段乘法的总和.

python django django-models django-orm django-queryset

48
推荐指数
3
解决办法
3万
查看次数

Django orm获得每个组的最新消息

我正在使用django 1.6与Mysql

我有这个型号

class Student(models.Model):
     username = models.CharField(max_length=200, unique = True)

class Score(models.Model)
     student = models.ForeignKey(Student)
     date = models.DateTimeField()
     score = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)

现在我想获得每个学生的最新成绩记录.
我试过了

Score.objects.values('student').annotate(latest_date=Max('date'))
Run Code Online (Sandbox Code Playgroud)

我也试过了

Score.objects.values('student__username').annotate(latest_date=Max('date'))
Run Code Online (Sandbox Code Playgroud)

如描述Django ORM - 获取组的最新记录, 但它没有帮助.

python django django-orm django-queryset

44
推荐指数
3
解决办法
2万
查看次数

flask_sqlalchemy `pool_pre_ping` 有时只工作

为了测试,我将MYSQL(RDS)参数修改如下;

wait_timeout = 40(默认为 28800)

max_allowed_pa​​cket = 1GB(最大 - 只是为了确保问题不是由小数据包引起的)

net_read_timeout = 10

Interactive_timeout 不变

然后在没有pool_pre_ping设置选项的情况下测试我的应用程序(默认为 False),使应用程序保持非活动状态 40 秒,尝试登录,然后我得到

Nov 14 20:05:20 ip-172-31-33-52 gunicorn[16962]: Traceback (most recent call last):
Nov 14 20:05:20 ip-172-31-33-52 gunicorn[16962]:   File "/var/www/api_server/venv/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1193, in _execute_context
Nov 14 20:05:20 ip-172-31-33-52 gunicorn[16962]:     context)
Nov 14 20:05:20 ip-172-31-33-52 gunicorn[16962]:   File "/var/www/api_server/venv/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 507, in do_execute
Nov 14 20:05:20 ip-172-31-33-52 gunicorn[16962]:     cursor.execute(statement, parameters)
Nov 14 20:05:20 ip-172-31-33-52 gunicorn[16962]:   File "/var/www/api_server/venv/lib/python3.6/site-packages/MySQLdb/cursors.py", line 206, in execute
Nov 14 20:05:20 …
Run Code Online (Sandbox Code Playgroud)

python mysql connection-pooling flask flask-sqlalchemy

42
推荐指数
2
解决办法
3398
查看次数

如何使用 pytest 测试异步函数?

@pytest.fixture
def d_service():
    c = DService()
    return c

# @pytest.mark.asyncio  # tried it too
async def test_get_file_list(d_service):
    files = await d_service.get_file_list('')
    print(files)
Run Code Online (Sandbox Code Playgroud)

然而,却出现了以下错误?

已收集 0 项 / 1 错误

===================================== 错误============== =====================
________________ 收集测试/e2e_tests/test_d.py 时出错 _________________
..\..\..\..\..\anaconda3\lib\site-packages\pluggy\__init__.py:617: 在 __call__ 中
    返回 self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)
..\..\..\..\..\anaconda3\lib\site-packages\pluggy\__init__.py:222: 在 _hookexec 中
    返回 self._inner_hookexec(钩子、方法、kwargs)
..\..\..\..\..\anaconda3\lib\site-packages\pluggy\__init__.py:216:在
    第一个结果=hook.spec_opts.get('第一个结果'),
..\..\..\..\..\anaconda3\lib\site-packages\_pytest\python.py:171:在 pytest_pycollect_makeitem 中
    res = 结果.get_result()
..\..\..\..\..\anaconda3\lib\site-packages\anyio\pytest_plugin.py:98:在 pytest_pycollect_makeitem 中
    标记=collector.get_closest_marker('anyio')
E AttributeError:“模块”对象没有属性“get_closest_marker”
!!!!!!!!!!!!!!!!!!!!! 已中断:收集期间出现 1 个错误!!!!!!!!!!!!!!!!!!
=========================== 2.53 秒内出现 1 个错误 ================== =========

我安装了以下软件包。错误消失,但测试被跳过。

pip install …
Run Code Online (Sandbox Code Playgroud)

python pytest python-asyncio pytest-asyncio

36
推荐指数
3
解决办法
4万
查看次数

如何从后端 API 获取标头或特定标头?

我想使用 fastAPI 从函数内的 API 中检索特定标头,但我找不到解决方案。

在烧瓶中很简单:request.headers['your-header-name']

为什么 fastAPI 做这么简单的事情却这么复杂?

有人知道检索标头的解决方案吗?谢谢 :)

装饰者:

def token_required(f):
    @wraps(f)
    def decorator(*args, **kwargs):
        CONFIG = settings.read_config()
        token = None
        headers = Request.headers
        if "Authorization" in headers:
            auth_header = Request.headers
            token = auth_header
        elif not token:
            return {"Error": "Token is missing or incorrect header name"}, 401

        try:
            public_key = CONFIG["APPLICATION"]["PUBLIC_KEY"]
            claim = jwt.decode(token, public_key)
            claim.validate()
        except UnicodeDecodeError as err:
            return {"Error": f"An error occurred -> {err} check your token"}, 401

        return f(*args, **kwargs)

    return decorator …
Run Code Online (Sandbox Code Playgroud)

python fastapi

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

从 CPython 文档中澄清“应该可以更改 1 的值”

请参阅此链接:https : //docs.python.org/3/c-api/long.html#c.PyLong_FromLong

当前的实现为 -5 到 256 之间的所有整数保留了一个整数对象数组;当您在该范围内创建一个 int 时,您实际上只是取回了对现有对象的引用。所以,应该可以改变 1 的值。我怀疑 Python 的行为,在这种情况下,是 undefined。:-)

在这种情况下,粗线是什么意思?

python implementation cpython

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

GET/POST参数的数量超出了设置.DATA_UPLOAD_MAX_NUMBER_FIELD S.

我收到一个错误,GET/POST参数的数量超出了设置.DATA_UPLOAD_MAX_NUMBER_FIELDS.Error在/ api/upload上说TooManyFieldsSent GET/POST参数的数量超出了settings.DATA_UPLOAD_MAX_NUMBER_FIELDS.我在views.py中写道

def upload(request):
    id, array = common(request)

    if request.FILES:
        file = request.FILES['req'].temporary_file_path()
    else:
        return HttpResponse('<h1>NG</h1>')

    return HttpResponse('<h1>OK</h1>')

def common(request):
    id = json_body.get("access", "0")
    if id == "":
        id = "0"

    s = []
    with open(ID_TXT, 'r') as f:
        for line in f:
            s += list(map(int, line.rstrip().split(',')[:-1]))

    array = [s[i:i + 2] for i in range(0, len(s), 2)]

    return id, array
Run Code Online (Sandbox Code Playgroud)

我使用POSTMAN发布访问和req数据 在此输入图像描述

我认为这个错误是能够发送文件大小的限制,所以我在settings.py中添加了一个代码

DATA_UPLOAD_MAX_MEMORY_SIZE = 100000000
Run Code Online (Sandbox Code Playgroud)

但错误无法解决.我读了这个页面如何避免"超出GET/POST参数的数量"错误?作为参考.我该如何解决这个问题?

python django

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

在django queryset上使用iterator()

我最近遇到了一些奇怪的行为,需要检查一下我的理解.

我在模型中使用了一个简单的过滤器,然后迭代结果.

例如

allbooks = Book.objects.filter(author='A.A. Milne')

for book in allbooks:
   do_something(book)
Run Code Online (Sandbox Code Playgroud)

奇怪的是,它只返回了部分书籍清单.

但是,当使用相同的代码并使用iterator()时,这似乎运行良好.

for book in allbooks.iterator():
    do_something(book)
Run Code Online (Sandbox Code Playgroud)

知道为什么??

ps我确实浏览了django文档,但看不到qeuryset如何在其他任何地方缓存...

iterator() 计算QuerySet(通过执行查询)并在结果上返回迭代器.QuerySet通常在内部缓存其结果,以便重复的评估不会导致其他查询; iterator()而是直接读取结果,而不在QuerySet级别进行任何缓存.对于返回大量对象的QuerySet,这通常会带来更好的性能并显着降低内存

请注意,iterator()在已经评估过的QuerySet 上使用将强制它再次进行评估,重复查询.

django iterator django-queryset

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