给定一个 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)
为什么会发生这种情况,我可以做些什么不同的事情来避免显式设置数据框列?
我想从文件中读取一些数据以快速创建许多测试帐户.我更喜欢使用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出于某种原因是出于某种原因还是这个错误?
按照文档和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) 我试图断言在保存我的客户端模型的实例时调用 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) 说我有一个向量列表
([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) 说我有这样的董事会
(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会做的伎俩
所以我有一个相当直接的序列化器 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吗? …