我正在使用VS Code 的 Python 扩展的排序导入功能。我想将此行的长度配置为 100;但是,我一直无法在我的settings.json文件中正确设置它。从文档来看,它似乎"python.sortImports.args": ["-l", "100"]应该可以工作,但它给了我一个错误:Invalid patch string: Skipped 1 files.
有任何想法吗?
在我的方法中,如果传入数据中未设置它,Serializer.validate我需要能够访问attrs['field']并回退,我想知道是否有一个通用的模式可以这样做。self.instance.field
以DRF 序列化器文档的对象级验证部分为例:
from rest_framework import serializers
class EventSerializer(serializers.Serializer):
description = serializers.CharField(max_length=100)
start = serializers.DateTimeField()
finish = serializers.DateTimeField()
def validate(self, attrs):
"""
Check that start is before finish.
"""
if attrs['start'] > attrs['finish']:
raise serializers.ValidationError("finish must occur after start")
return attrs
Run Code Online (Sandbox Code Playgroud)
(这使用正常的Serializer,但想象它是模型ModelSerializer的a Event。)
当创建或更新事件时,数据中包含start和属性,则此序列化程序将按预期工作。finish
但是,如果您提出如下请求:
client.patch(f"/events/{event.id}", {"start": "2021-01-01"})
Run Code Online (Sandbox Code Playgroud)
那么序列化器将会失败,因为尝试访问会attrs['finish']产生KeyError. 在这种情况下,我需要能够回退到self.instance.finish,因为start < finish验证仍然是必要的。
有解决这个问题的通用模式吗?
您可以通过在所有方法的开头添加一个代码片段来解决此问题 …
我有一个 Django 应用程序,我托管在 Heroku 上,并通过 Papertrail Heroku 附加组件登录到 Papertrail。我在很多地方直接将信息记录到 Papertrail,目前通过:
logger = logging.getLogger('papertrail')
logger.info('important text')
Run Code Online (Sandbox Code Playgroud)
我根据此链接设置日志记录配置:
import sys
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'level': 'INFO',
'class': 'logging.StreamHandler',
'stream': sys.stdout,
},
},
'loggers': {
'django': {
'handlers': ['console'],
'level': 'ERROR',
},
'papertrail': {
'handlers': ['console'],
'level': 'INFO',
},
},
}
Run Code Online (Sandbox Code Playgroud)
总之,这会像这样记录到 Papertrail:
Feb 07 06:10:56 app_name app/worker.1: important text
Run Code Online (Sandbox Code Playgroud)
但是,我注意到 usingprint('important text')在这里完成了同样的事情。在这种情况下继续使用loggingoverprint来记录“重要文本”有什么好处吗?我通读了这篇文章,似乎没有一条适用于此。