我正在努力理解ListField
和DictField
.我想将它用作序列化程序中的字段.我有一个ListField
可能会包含很多DictField
.我试着编写一个如下的序列化器:
class StopOncomingSerialier(serializers.Serializer):
idn = serializers.IntegerField(read_only=True)
buses = serializers.ListField(
child=serializers.DictField(
idn=serializers.IntegerField(read_only=True),
stops_left=serializers.IntegerField(read_only=True)
),
read_only=True
)
Run Code Online (Sandbox Code Playgroud)
我知道,这没有任何意义,因为文件说,DictField
并ListField
采取child
作为参数.所以,上面的代码自然会引发错误:
TypeError: __ init __()得到一个意外的关键字参数'stops_left'
{
"idn": 1,
"buses": [
{"idn": 11, "stops_left": 4},
{"idn": 12, "stops_left": 15}
]
}
Run Code Online (Sandbox Code Playgroud)
怎么做到这一点?buses
是一个列表,可能包含我想要的任意数量的元素.
PyPy 的主页上说 Guido van Rossum 说:
如果你想让你的代码运行得更快,你可能应该只使用 PyPy。
PyPy 的主页并未提及此声明是在何处或在什么上下文中做出的。他有没有在会议上说,与某人面对面交谈?无论如何,周围的话题是什么?是关于 Python 的性能吗?
我正在按照此文档在我的应用程序中实现本地化。我运行flutter build apk
并生成相关的本地化类。但是,当我想AppLocalizations
在lib下导入时,它不会自动导入。所以我手动写入import 'package:flutter_gen/gen_l10n/app_localizations.dart';
每个我想使用本地化的文件。
我想知道是否有办法让 VSCode 自动导入生成AppLocalizations
类,CTRL+.
因为每次编写导入都很痛苦。
arb-dir: l10n
template-arb-file: app_tr.arb
output-localization-file: app_localizations.dart
Run Code Online (Sandbox Code Playgroud)
在Django管理界面中,有很好的能力动态地将新项目添加到外键字段,我想使用bootstrap模式为弹出窗口和Ajax进行表单提交和验证.
这是我的用例:
这是添加Item的主窗体.物品有一个参考和一个类别.
这是添加新类别的第二种形式.
我没有问题显示模态和提交表单添加新类别.相反,问题在于表单验证(如果用户提交空表单),并刷新选择内容以添加新添加的类别.
这是我的代码:
class ItemForm(forms.ModelForm):
ref = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control'}),max_length=255)
category = forms.ModelChoiceField(queryset=ItemCategory.objects.all(), empty_label="(choose from the list)")
class ItemCategoryForm(forms.ModelForm):
category = forms.CharField(
max_length=255,
required=True,
help_text='Add a new category')
Run Code Online (Sandbox Code Playgroud)
def add(request):
if request.method == 'POST':
form = ItemForm(request.POST)
if form.is_valid():
item= Item()
item.ref = form.cleaned_data.get('ref')
item.save()
return redirect('/item_list/')
else:
form = ItemForm()
form1 = ItemCategoryForm()
return render(request, 'item/add.html', {'form': form, 'form1':form1})
def add_category(request):
if request.method == 'POST':
form1 = ItemCategoryForm(request.POST)
if form1.is_valid():
vulnCategory = ItemCategory()
ItemCategory.category = form1.cleaned_data.get('category') …
Run Code Online (Sandbox Code Playgroud) class Stop(models.Model):
idn = models.PositiveIntegerField(primary_key=True, unique=True)
label = models.CharField(null=False, blank=False, max_length=512)
coor_x = models.FloatField()
coor_y = models.FloatField()
buses = models.ManyToManyField(Bus)
latest_query_datetime = models.DateTimeField(default=datetime(2000, 1, 1, 0, 0, 0))
latest_query_data = JSONField(default={})
class Meta:
ordering = ["label"]
def __str__(self):
return self.label
Run Code Online (Sandbox Code Playgroud)
当我跑:
python3 manage.py makemigrations && python3 manage.py migrate
Run Code Online (Sandbox Code Playgroud)
它提出了ProgrammingError
jsonb数据类型不存在的说法:
Migrations for 'rest':
0007_auto_20160612_1301.py:
- Alter field latest_query_data on stop
Operations to perform:
Apply all migrations: contenttypes, rest, auth, sessions, admin
Running migrations:
Rendering model states... DONE
Applying …
Run Code Online (Sandbox Code Playgroud) 我做了一个JSON序列化程序to
视图.我返回了一个QuerySet
被调用的对象,entries
它查找POST参数,如下所示:
entries = blog.models.Entry.objects.filter(content__icontains=request.POST.get('q'))
Run Code Online (Sandbox Code Playgroud)
然后我用serializers
了django.core
.
serializers.serialize("json", entries, fields=('title', 'content', 'created'))
Run Code Online (Sandbox Code Playgroud)
这就像一个魅力,然而,我想把content
s变成截断的单词.
class Car(object):
def __init__(self, color, engine, oil):
self.color = color
self.__engine = engine
self.__oil = oil
a = Car('black', 'a cool engine', 'some cool oil')
Run Code Online (Sandbox Code Playgroud)
我们假设__engine和__oil变量是私有的,这意味着我无法通过a .__ engine之类的调用来访问它们。但是,我可以使用__dict__变量来访问甚至更改这些变量。
# Accessing
a.__dict__
{'_Car__engine': 'a cool engine', 'color': 'black', '_Car__oil': 'some cool oil'}
# Changing
a.__dict__['_Car__engine'] = "yet another cool engine"
a.__dict__
{'_Car__engine': 'yet another cool engine', 'color': 'black', '_Car__oil': 'some cool oil'}
Run Code Online (Sandbox Code Playgroud)
问题很简单。我希望仅在类内部访问和更改私有变量。
Result::expect
对给定的消息感到恐慌。不过,我想在惊慌失措之前先记录一下。假设我使用了日志外观和实现,我想做一些事情:
// a result called `result`
result.something_like_expect(|e| {
// assuming `e` is an error instance and implements `Display`
error!("An error happened: {}", e);
// and panics here
});
Run Code Online (Sandbox Code Playgroud)
使用 Rust 1.39.0 有这样的解决方案吗?
我正在测试一个端点,它自然返回一个包含日期时间字符串的 JSON。
我在测试中比较响应内容如下:
assert serializer_instance.data == {
"created_at": str(model_instance.created_at),
"updated_at": str(model_instance.updated_at),
}
Run Code Online (Sandbox Code Playgroud)
created_at
并且updated_at
肯定是DateTimeField
s。然而,在这种情况下,测试失败:
E Differing items:
E {'created_at': '2020-06-24T12:42:03.578207+03:00'} != {'created_at': '2020-06-24 09:42:03.578207+00:00'}
E {'updated_at': '2020-06-24T12:42:03.578231+03:00'} != {'updated_at': '2020-06-24 09:42:03.578231+00:00'}
Run Code Online (Sandbox Code Playgroud)
因此str
对日期时间使用不同的格式。当然,使用 可以成功通过测试用例strftime
,但是应该有一个内部函数可以在 Django 或 Django Rest Framework 中轻松完成此操作,我想学习它。
提前致谢。
我有一个奇怪的问题。每当我尝试从 发送电子邮件时TestCase
,我都收不到它。但是,我在 Django shell 上尝试了相同的方法,并成功发送了电子邮件。这是我的TestCase
:
class DefaultEmailTestCase(TestCase):
def test_send(self):
msg = EmailMessage(
"Test Message",
"This is a test message.",
to=["foo@bar.com", "foo@baz.com"]
)
val = msg.send()
self.assertEqual(val, 1)
Run Code Online (Sandbox Code Playgroud)
它成功完成,但我没有收到电子邮件。这是我在 Django 的 shell 上所做的:
from django.core.mail import EmailMessage
receivers = ["foo@bar.com", "foo@baz.com"]
msg = EmailMessage(
"Test Message",
"This is a test message."
to=receivers
)
msg.send()
Run Code Online (Sandbox Code Playgroud)
我成功地收到了消息。
这是我的设置(带有虚拟信息):
EMAIL_BACKEND = 'django.core.mail.backends.locmem.EmailBackend'
EMAIL_HOST = "foo.bar.com"
EMAIL_PORT = 465 # This is the port that my email provider uses.
EMAIL_HOST_USER = …
Run Code Online (Sandbox Code Playgroud)