小编Erd*_*ray的帖子

Django Rest Framework ListField和DictField

我正在努力理解ListFieldDictField.我想将它用作序列化程序中的字段.我有一个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)

我知道,这没有任何意义,因为文件说,DictFieldListField采取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是一个列表,可能包含我想要的任意数量的元素.


环境

  • python 3.5.1
  • django 1.9.6
  • django-rest-framework 3.3.3

python django python-3.x django-rest-framework

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

Guido van Rossum 在哪里和在什么上下文中说“如果你想让你的代码运行得更快,你可能应该只使用 PyPy。”?

PyPy 的主页上说 Guido van Rossum 说:

如果你想让你的代码运行得更快,你可能应该只使用 PyPy。

PyPy 的主页并未提及此声明是在何处或在什么上下文中做出的。他有没有在会议上说,与某人面对面交谈?无论如何,周围的话题是什么?是关于 Python 的性能吗?

python pypy

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

VSCode 无法自动导入 flutter_gen

我正在按照此文档在我的应用程序中实现本地化。我运行flutter build apk并生成相关的本地化类。但是,当我想AppLocalizations在lib下导入时,它不会自动导入。所以我手动写入import 'package:flutter_gen/gen_l10n/app_localizations.dart';每个我想使用本地化的文件。

我想知道是否有办法让 VSCode 自动导入生成AppLocalizations类,CTRL+.因为每次编写导入都很痛苦。

l10n.yaml 文件

arb-dir: l10n
template-arb-file: app_tr.arb
output-localization-file: app_localizations.dart
Run Code Online (Sandbox Code Playgroud)

环境

dart visual-studio-code flutter

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

Django Ajax提交验证和多个表单处理

在Django管理界面中,有很好的能力动态地将新项目添加到外键字段,我想使用bootstrap模式为弹出窗口和Ajax进行表单提交和验证.

这是我的用例:

这是添加Item的主窗体.物品有一个参考和一个类别.

在此输入图像描述

这是添加新类别的第二种形式.

在此输入图像描述

我没有问题显示模态和提交表单添加新类别.相反,问题在于表单验证(如果用户提交空表单),并刷新选择内容以添加新添加的类别.

这是我的代码:

forms.py

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)

views.py

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)

python forms django ajax jquery

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

PostgreSQL中字段中的Django ProgrammingError

models.py

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)

它提出了ProgrammingErrorjsonb数据类型不存在的说法:

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)

django postgresql psycopg2 python-3.x jsonb

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

在Django中,有没有办法在视图中截断?

我做了一个JSON序列化程序to视图.我返回了一个QuerySet被调用的对象,entries它查找POST参数,如下所示:

entries = blog.models.Entry.objects.filter(content__icontains=request.POST.get('q'))
Run Code Online (Sandbox Code Playgroud)

然后我用serializersdjango.core.

serializers.serialize("json", entries, fields=('title', 'content', 'created'))
Run Code Online (Sandbox Code Playgroud)

这就像一个魅力,然而,我想把contents变成截断的单词.


环境

  • Django 1.8.7
  • Python 3.4

python django serialization json truncate

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

如何使Python无法访问私有变量?

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)

问题很简单。我希望仅内部访问和更改私有变量。

python oop private class object

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

如何在恐慌之前使用 Result::expect 记录消息?

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 有这样的解决方案吗?

logging rust

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

测试时如何在 Django/DRF 中将日期时间转换为字符串

我正在测试一个端点,它自然返回一个包含日期时间字符串的 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肯定是DateTimeFields。然而,在这种情况下,测试失败:

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 中轻松完成此操作,我想学习它。

提前致谢。


环境

  • Python 3.8.3
  • 姜戈 2.2.12
  • Django Rest 框架 3.11.0

python django django-rest-framework

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

Django 不在 TestCase 上发送电子邮件,但它在 Shell 上发送

我有一个奇怪的问题。每当我尝试从 发送电子邮件时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)

python email django

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