我想通过运行它的Migration.backwards()
方法来恢复我的最后一次迁移 (0157) 。由于我正在恢复生产服务器中的迁移,因此我想在代码部署期间自动运行它。部署脚本执行以下步骤:
manage.py migrate <app>
touch django.wsgi
如果可以,我会创建新的迁移文件,告诉 South 向后迁移到 0156:
migrations/0158_backward__migrate_to_0156.py
Run Code Online (Sandbox Code Playgroud)
此提交的迁移将部署到生产并在manage.py migrate <app>
命令期间执行。在这种情况下,我不必像这些答案中建议的那样手动执行向后迁移。
可以说,我创建了两个数据迁移,第一个用于用户的支付,第二个用于用户模型。我已经为这两种迁移实现了 reverses() 方法,以防我不得不恢复这些数据迁移。我已将这两个迁移部署到生产中。突然发现支付迁移包含错误。我想尽快恢复我最近的两次数据迁移。什么是最快安全的方法?
让我们说我有这些路径:
/tmp/a
/tmp/abc
/tmp/abc/d/my_file.py
Run Code Online (Sandbox Code Playgroud)
我怎么能检查是否/tmp/abc/d/my_file.py
是一个子路径/tmp/abc
?我试过了:
file_path.startswith(dir_path)
Run Code Online (Sandbox Code Playgroud)
但它返回True
的/tmp/a
目录,而my_file.py
不是它.
当我使用pip install -e .
它安装我的包时,它只安装不满意的依赖项并忽略依赖项升级。每次运行时如何安装最新的依赖版本pip install -e .
?
我曾尝试使用pip install --upgrade -e .
,但使用此选项没有任何变化,我仍然收到Requirement already satisfied, skipping upgrade: <dependency>
通知而不是安装最新的可用版本。
我的setup.py
文件:
from setuptools import setup, find_packages
setup(
name='test_package',
author='test',
author_email='test@example.com',
description='Test package',
version='0.0.1',
packages=find_packages(),
install_requires=[
'pyyaml',
'requests',
],
python_requires='>=3.6'
)
Run Code Online (Sandbox Code Playgroud) 我已经实现了django_channels
AsyncJsonWebsocketConsumer
订阅"chat"
组的消费者:
from channels.generic.websocket import AsyncJsonWebsocketConsumer
class CeleryTaskConsumer(AsyncJsonWebsocketConsumer):
async def connect(self):
await self.accept()
await self.channel_layer.group_add(group='chat', channel=self.channel_name)
async def new_message_handler(self, event):
await self.send_json(content={'event': event})
Run Code Online (Sandbox Code Playgroud)
然后我会定期向群组发送消息"chat"
:
import channels.layers
from asgiref.sync import async_to_sync
def send_notification():
channel_layer = channels.layers.get_channel_layer()
async_to_sync(channel_layer.group_send)("chat", {
'type': 'new.message.handler',
'message': 'Hello world!'
})
Run Code Online (Sandbox Code Playgroud)
一切都按预期进行,但是我经常遇到此异常:
Exception inside application: Reader at end of file
File "/usr/lib64/python3.6/asyncio/coroutines.py", line 129, in throw
return self.gen.throw(type, value, traceback)
File "/venv/lib64/python3.6/site-packages/channels/consumer.py", line 59, in __call__
[receive, self.channel_receive], self.dispatch
File "/usr/lib64/python3.6/asyncio/coroutines.py", line …
Run Code Online (Sandbox Code Playgroud) 我能够制作只读模型序列化器,例如:
class FooSerializer(serializers.ModelSerializer):
class Meta:
model = Foo
fields = ['name', 'ratio']
read_only_fields = fields
Run Code Online (Sandbox Code Playgroud)
但是,我倾向于频繁添加/删除字段Foo
。如果每次Foo
修改序列化器时不更新它会容易得多。这fields = '__all__'
非常方便:
class FooSerializer(serializers.ModelSerializer):
class Meta:
model = Foo
fields = '__all__'
read_only_fields = fields
Run Code Online (Sandbox Code Playgroud)
但是,read_only_fields
不接受__all__
作为有效选项并引发此异常:
Exception Type: TypeError at /api/foo/
Exception Value: The `read_only_fields` option must be a list or tuple. Got str.
Run Code Online (Sandbox Code Playgroud)
如何将所有字段标记为只读而不显式地将每个字段添加到read_only_fields
列表中?
serialization django-models python-3.x django-rest-framework
我RunPython
在迁移中进行了操作,例如其中一项迁移:
class DataMigration(migrations.Migration):
dependencies = [('app1', '0001_initial')]
operations = [
migrations.RunPython(create_data, delete_data, elidable=True),
]
Run Code Online (Sandbox Code Playgroud)
此操作接受一个可选参数,该参数在Django 文档elidable
中进行了描述:
可选的 Elidable 参数确定在压缩迁移时是否删除(消除)该操作。
这个描述让我有点困惑。elidable=True
我的问题是:当带标志的迁移被压制时会发生什么?
我想迁移 withelidable=True
会被简单地删除。并且必须采取一些手动步骤才能将删除的迁移逻辑添加到压缩的迁移逻辑中。
我有 2Dnumpy.array
和一组索引:
a = array([[0, 0], [0, 1], [1, 0], [1, 1]])
ix = (2, 0, 3, 1)
Run Code Online (Sandbox Code Playgroud)
如何按索引对数组的行进行排序?预期结果:
array([[1, 0], [0, 0], [1, 1], [0, 1]])
Run Code Online (Sandbox Code Playgroud)
我尝试使用numpy.take
,但它仅适用于一维数组。
我想定义一个函数,它有类似字典的参数,例如:
def my_func(params={'skip': True}):
print(params['skip'])
params['skip'] = False
Run Code Online (Sandbox Code Playgroud)
但是,如果使用可变字典dict()
- 它只会为函数创建一次。对该字典所做的修改会在下一次调用期间出现。
my_func() # prints True
my_func() # prints False
Run Code Online (Sandbox Code Playgroud)
目前我唯一的想法是使用键/值对的元组,它可以转换成字典,而不是提供类似字典的数据。
def my_func(params=(('skip', True))):
params = dict(params)
print(params['skip'])
params['skip'] = False
Run Code Online (Sandbox Code Playgroud)
但是,我真的很想避免这种对字典的显式转换。我的问题是:是否有一个不可变字典替代 for ,dict()
因为有tuple()
for list()
?
将标准timedelta字符串转换为timedelta对象的最简单方法是什么?
我已经打印了几个timedelta对象并获得了这些字符串:
'1157 days, 9:46:39'
'12:00:01.824952'
'-1 day, 23:59:31.859767'
Run Code Online (Sandbox Code Playgroud)
我知道我自己可以编写解析器,但有没有更简单的解决方案?
是否有可能对Django queryset case不敏感地排序?这个查询:
MyModel.objects.order_by('title')
Run Code Online (Sandbox Code Playgroud)
使用区分大小写排序.结果如下排序:
X..
a..
b..
Run Code Online (Sandbox Code Playgroud)
但我想对这样的标题进行排序:
a..
b..
X..
Run Code Online (Sandbox Code Playgroud) 我想以相反的顺序对字符串列表进行排序,例如:
my_list = ['aaa', 'bbb', 'ccc']
Run Code Online (Sandbox Code Playgroud)
预期结果:
['ccc', 'bbb', 'aaa']
Run Code Online (Sandbox Code Playgroud)
我不想使用sorted(my_list, reverse=True)
,因为在更复杂的情况下,按两个值进行过滤将无法正常工作。例如:
my_list2 = [('aaa', 'bbb'), ('aaa', 'ccc'), ('bbb', 'aaa'), ('bbb', 'ccc')]
Run Code Online (Sandbox Code Playgroud)
预期结果将是:
[('bbb', 'aaa'), ('bbb', 'ccc'), ('aaa', 'bbb'), ('aaa', 'ccc')]
Run Code Online (Sandbox Code Playgroud)
sorted(my_list2, reverse=True)
返回:
[('bbb', 'ccc'), ('bbb', 'aaa'), ('aaa', 'ccc'), ('aaa', 'bbb')]
Run Code Online (Sandbox Code Playgroud)
用数字很简单,您可以取反值:
>>> my_list3 = [(1, 2), (1, 3), (2, 1), (2, 3)]
>>> sorted(my_list3, key=lambda x: (-x[0], x[1]))
... [(2, 1), (2, 3), (1, 2), (1, 3)]
Run Code Online (Sandbox Code Playgroud)
但是如何使用字符串呢?
我有两个日期作为datetime.date
对象,查找这两个日期之间的工作日数(包括开始日期和排除结束日期)的最 Pythonic 方法是什么?例如:
from datetime import date, timedelta
d1 = date(2019, 3, 1)
d2 = date(2019, 5, 6)
# The difference between d2 and d1 is 46 workdays
Run Code Online (Sandbox Code Playgroud)
我想到写一个循环:
workdays = 0
for i in range((d2 - d1).days):
if (d1 + timedelta(days=i)).isoweekday() <= 5:
workdays += 1
Run Code Online (Sandbox Code Playgroud)
不过,我认为有一个更简单的方法可以解决这个问题。
python ×10
python-3.x ×5
django ×4
python-2.7 ×2
arguments ×1
arrays ×1
date ×1
datetime ×1
dictionary ×1
directory ×1
django-south ×1
immutability ×1
list ×1
migration ×1
numpy ×1
pip ×1
setup.py ×1
sorting ×1
sqlite ×1
string ×1
websocket ×1