小编Jac*_*ans的帖子

将 Django QuerySet 转换为 Pandas Dataframe 并保持列顺序

给定一个 Django 查询集,如下所示:

qs = A.objects.all().values_list('A', 'B', 'C', 'D', 'E', 'F')
Run Code Online (Sandbox Code Playgroud)

我可以轻松地将我的 qs 转换为 Pandas 数据帧:

df = pd.DataFrame.from_records(qs.values('A', 'B', 'C', 'D', 'E', 'F'))
Run Code Online (Sandbox Code Playgroud)

但是,不会维护列顺序。转换后,我需要立即指定新的列顺序,但我不清楚原因:

df = df.columns['B', 'F', 'C', 'E', 'D', 'A']
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况,我可以做些什么不同的事情来避免显式设置数据框列?

django pandas

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

Django 1.9批量创建新用户没有正确散列密码

我想从文件中读取一些数据以快速创建许多测试帐户.我更喜欢使用bulk_create方法,因为这对于向模型添加许多记录来说通常要快得多.但是,当使用带有Django用户模型的bulk_create方法时,密码没有正确散列,这意味着我无法以用户身份登录和注销.

    User.objects.bulk_create([
        User(
            username=name,
            email='sample@email.co.uk',
            password='Sample&Password!',
            is_active=True,
        ) for name in f.read().splitlines()
    ])
Run Code Online (Sandbox Code Playgroud)

Django admin在每个用户的密码字段中显示以下错误

无效的密码格式或未知的散列算法.

然而,第二种方法继续工作(尽管速度慢得多).

    for name in f.read().splitlines():
        User.objects.create_user(
            name,
            'sample@email.co.uk',
            password="Sample&Password!"
        ).save()
Run Code Online (Sandbox Code Playgroud)

我的问题是,有没有办法在Django中一次性批量创建用户.Django出于某种原因是出于某种原因还是这个错误?

python django

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

Django Celery收到类型为"appname.tasks.add"的未注册任务

按照文档和Demo Django项目https://github.com/celery/celery/tree/3.1/examples/django

项目结构

piesup2
    |
    piesup2
    |  |__init__.py
    |  |celery.py
    |  |settings.py
    |  |urls.py
    reports
       |tasks.py
       |models.py
       |etc....
Run Code Online (Sandbox Code Playgroud)

我的守则

piesup2/celery.py

from __future__ import absolute_import

import os

from celery import Celery

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'piesup2.settings')

from django.conf import settings  # noqa

app = Celery('piesup2')

# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)


@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request)) …
Run Code Online (Sandbox Code Playgroud)

python django celery

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

Django断言post_save信号被调用

我试图断言在保存我的客户端模型的实例时调用 post_save 信号接收器。

信号接收器如下所示:

# reports/signals.py

@receiver(post_save, sender=Client)
def create_client_draft(sender, instance=None, created=False, **kwargs):
    """Guarantees a DraftSchedule exists for each Client post save"""
    print('called')  # Log to stdout when called
    if created and not kwargs.get('raw', False):
        DraftSchedule.objects.get_or_create(client=instance)
Run Code Online (Sandbox Code Playgroud)

我设置了一个看起来像这样的测试

@pytest.mark.django_db
@patch('reports.signals.create_client_draft')
def test_auto_create_draftschedule_on_client_creation(mock_signal):
    client = mixer.blend(Client)  # Creates a Client with random data
    assert mock_signal.call_count == 1
Run Code Online (Sandbox Code Playgroud)

我希望这个测试能够通过,因为called运行测试时打印语句出现在捕获的标准输出中。

然而,测试运行者似乎认为我的模拟函数根本没有被调用。

mock_signal = <MagicMock name='create_client_draft' id='139903470431088'>

    @pytest.mark.django_db
    @patch('reports.signals.create_client_draft')
    def test_auto_create_draftschedule_on_client_creation(mock_signal):
        client = mixer.blend(Client)
>       assert mock_signal.call_count == 1
E       AssertionError: assert 0 …
Run Code Online (Sandbox Code Playgroud)

python django unit-testing

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

Clojure,总结一个向量列表,记录沿途的位置

说我有一个向量列表

([0 0] [1 0] [1 0] [1 0])
Run Code Online (Sandbox Code Playgroud)

我希望能够将矢量列表添加到一起并记录每个独特的位置.

                [0 0]
[0 0] + [1 0] = [1 0]
[1 0] + [1 0] = [2 0]
[2 0] + [1 0] = [3 0]
Run Code Online (Sandbox Code Playgroud)

提供4个独特的职位.

([0 0] [1 0] [2 0] [3 0]) 
Run Code Online (Sandbox Code Playgroud)

知道如何在Clojure中实现这一目标吗?

我尝试了以下代码,但它溢出了大量的向量:(

(defn add-vectors [vectors]
  (let [[a b] vectors]
    (vec(map + a b))))

(defn get-positions [dirs positions]
  (if (empty? (rest dirs))
    (set positions)
    (do
      (let [next-pos (add-vectors (take 2 dirs))]
        (get-directions (conj (rest (rest dirs)) …
Run Code Online (Sandbox Code Playgroud)

lisp recursion tail-recursion vector clojure

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

Clojure映射哈希映射的函数列表,每次更新哈希映射

说我有这样的董事会

(def board {:a 10 :b 12})
Run Code Online (Sandbox Code Playgroud)

以及这样的功能列表

(def funcs [(assoc board :a 2)
            (assoc board :b 4)
            (assoc board :a (inc (get board :a)))])
Run Code Online (Sandbox Code Playgroud)

我如何将列表中的每个操作应用到我的电路板上,每次都以功能方式更新.

funcs在我的repl中进行评估,在调用每个函数后给出一个返回值列表,但每次都会保持电路板本身不变

user=> funcs
[{:a 2, :b 12} {:a 10, :b 4} {:a 11, :b 12}
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望每次运行函数时更新电路板的值

所以在运行all命令后,板的最终状态应为: {:a 3 :b 4}

我知道这可能是使用尾递归但我想避免这样做,因为我几乎可以肯定reduce/ apply/ 的组合map会做的伎俩

clojure

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

Django Restul返回绝对URL

所以我有一个相当直接的序列化器 serializers.py

class ScheduleSerializer(serializers.ModelSerializer):

    class Meta:
        model = FrozenSchedule
        fields = ['startDate', 'endDate', 'client', 'url']

    startDate = serializers.DateField(source='start_date')
    endDate = serializers.DateField(source='end_date')
    client = serializers.StringRelatedField(many=False)
    url = serializers.URLField(source='get_absolute_url')
Run Code Online (Sandbox Code Playgroud)

get_absolute_url 在我的 models.py

def get_absolute_url(self):
    return reverse('reports:frozenschedule-detail', kwargs={
        'slug': self.client.slug, 'pk': self.id
    })
Run Code Online (Sandbox Code Playgroud)

它与ViewSet相关 viewsets.py

class ScheduleViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = FrozenSchedule.objects.not_abandoned().future()\
        .filter(signed=False).order_by('start_date')
    serializer_class = serializers.ScheduleSerializer
Run Code Online (Sandbox Code Playgroud)

它返回JSON,如下所示:

 [
    {
        "startDate": "2016-10-01",
        "endDate": null,
        "client": "Abscissa.Com Limited",
        "url": "/clients/abscissac/frozenschedule/1",
    }
]
Run Code Online (Sandbox Code Playgroud)

但我希望它返回完整的URL,而不仅仅是相对路径

[
    {
        "startDate": "2016-10-01",
        "endDate": null,
        "client": "Abscissa.Com Limited",
        "url": "http://localhost:8000/clients/abscissac/frozenschedule/1",
    }
]
Run Code Online (Sandbox Code Playgroud)

我可以在我的Serializer中以这种方式序列化URL吗? …

python django rest django-rest-framework

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