我尝试编写返回异步函数的所有结果的函数,并执行一个回调,该回调推入一个数组并记录每个异步函数的结果.
作为服务员,在完成所有菜肴后带来所有菜肴.我不明白如何获取应该返回的子参数.任务代码和我的工作解决方案如下:
任务:
var dishOne = function(child) {
setTimeout(function() {
child('soup');
}, 1000);
};
var dishTwo = function(child) {
setTimeout(function() {
child('dessert');
}, 1500);
};
waiter([dishOne, dishTwo], function(results) {
console.log(results); // console output = ['soup', 'dessert']
});
Run Code Online (Sandbox Code Playgroud)
我的工作解决方案:
function child(arg) {
this.arr.push(arg)
}
function waiter(funcArray, doneAll) {
var result = {
arr: []
};
let i = 0;
const x = child.bind(result)
funcArray.forEach(function(f) {
f(x)
i++;
if(i == 2) {
doneAll(result.arr)
}
});
}
Run Code Online (Sandbox Code Playgroud) 有没有机会在django admin中添加链接到'raw_id_fields'旁边的外键对象的页面?我使用raw_id_fields来减少对mysql的查询次数.当我不使用raw_id_fields时,我可以编辑或添加外键对象.
如何用raw_id_fields做到这一点?
@AntoinePinsard,我尝试了第二种解决方案."Edit My FK"字段已创建,但除了连字符外什么也没有.
那是我的模式.
class FlatAdmin(admin.ModelAdmin):
inlines = [NeedInline]
readonly_fields = ('flat_house_edit_link',)
raw_id_fields = ('flat_house',)
list_display = ('show_date','show_block','show_house','show_rooms','show_price','show_stage')
list_filter = ('flat_house__house_block','flat_rooms')
search_fields = ('flat_house__id',)
field = ['flat_house','flat_house_edit_link','flat_owner','flat_price','flat_rooms','flat_total_sq','flat_life_sq','flat_kitchen_sq','flat_floors']
def flat_house_edit_link(self, instance):
if instance:
fk_id = instance.user_id
else:
fk_id = None
if fk_id:
opts = instance._meta.get_field('flat_house').rel.model._meta
related_url = reverse(
'admin:{}_{}_change/?_to_field=id&_popup=1'.format(
opts.ha,
opts.house,
),
args=[fk_id],
)
return format_html(
'<a target=_blank href="{}">Go!</a>', related_url)
else:
return "No related object"
flat_house_edit_link.short_description = "Change house"
admin.site.register(Flat,FlatAdmin)
Run Code Online (Sandbox Code Playgroud) 我遇到了一个问题.
当我尝试打开更改页面以查看元素内的参数(例如djangosite.com/admin/djangoapp/someelement/1/change/
)时,它加载速度非常慢(10-15秒).
我发现Django正在进行大量重复查询:
更新: 我认为我在admin.py中犯了错误.
inlines = [PhoneInline,FlatInline,NeedInline]
Run Code Online (Sandbox Code Playgroud)
如果我删除上面的一切都很好.
mysql日志
2161 Query set autocommit=0
2161 Query SELECT `ha_phone`.`id`, `ha_phone`.`phone_number`, `ha_phone`.`phone_owner_id` FROM `ha_phone` WHERE `ha_phone`.`id` = 262
2161 Query SELECT `django_content_type`.`id`, `django_content_type`.`app_label`, `django_content_type`.`model` FROM `django_content_type` WHERE (`django_content_type`.`model` = 'phone' AND `django_content_type`.`app_label` = 'MYAPP')
2161 Query commit
2161 Query set autocommit=1
2161 Query SELECT `ha_owner`.`id`, `ha_owner`.`owner_pub_date`, `ha_owner`.`owner_name`, `ha_owner`.`owner_verify`, `ha_owner`.`owner_company_id` FROM `ha_owner` WHERE `ha_owner`.`id` = 236
2161 Query SELECT `ha_company`.`id`, `ha_company`.`company_name` FROM `ha_company` WHERE `ha_company`.`id` = 1
2161 Query SELECT `ha_owner`.`id`, …
Run Code Online (Sandbox Code Playgroud) FormView
如果表单有效,我将重定向到上一页。这工作正常,但我如何告诉用户信息已发布?我希望他在重定向后在模态窗口中看到成功消息。
我已经尝试完成request.session
,get_success_url
但它不符合我的目标,因为用户可以多次提交表单。那么如何在get_success_url
in 中返回任何带有重定向的消息FormView
?
我的 FormView
class CatPhotoUploadFormView(FormView):
template_name = 'blank.html'
form_class = CatPhotoForm
def get_success_url(self):
self.request.session['success_message'] = 'Everything is fine'
return reverse('cat:detail_cat', args=(self.kwargs['pk'],))
def form_valid(self, form):
cat = Cat.objects.filter(id__exact=self.kwargs['pk'])
for each in form.cleaned_data['attachments']:
print('****', each, '****', type(each))
Photo.objects.create(photo_path=each, photo_author=self.request.user, photo_cat = cat[0])
return super(CatPhotoUploadFormView, self).form_valid(form)
Run Code Online (Sandbox Code Playgroud) 我尝试从文本文件中读取字符串,对其进行编码并保存到文件中。我想使用pipe
以便hash
从转移ReadStream
到WriteStream
。但我不知道如何转换更改后的数据。我的代码:
const crypto = require('crypto');
const fs = require('fs');
let hash = crypto.createHash('md5');
var rs = fs.createReadStream('./passwords.txt');
var ws = fs.createWriteStream('./new_passwords.txt');
rs.on('data', function(d) {
hash.update(d);
});
rs.on('end', function(d) {
console.log(hash.digest('hex'))
});
Run Code Online (Sandbox Code Playgroud) 我有一个用于转换数据并将其另存为csv文件的JavaScript。看起来像这样:
function downloadCSV(args) {
var data, filename, link;
var type = args.type;
var fields = Object.keys(json_for_export[0]);
var csv = json_for_export.map(function(row){
return fields.map(function(fieldName){
return '"' + (row[fieldName] || '') + '"';
});
});
csv.unshift(fields);
csv = csv.join('\r\n')
if (csv == null) return;
filename = 'csv' + '_' + args.filename || 'export.csv';
if (!csv.match(/^data:text\/csv/i)) {
csv = 'data:text/csv;charset=utf-8,' + '\uFEFF' + csv;
}
data = encodeURI(csv);
link = document.createElement('a');
link.setAttribute('href', data);
link.setAttribute('download', filename);
link.click();
}
Run Code Online (Sandbox Code Playgroud)
它可以在Chrome浏览器中正常运行,但不能在Firefox中运行。是什么原因造成的?检查控制台,然后将数据格式化为csv类型。
django ×2
django-admin ×2
javascript ×2
csv ×1
django-forms ×1
fs ×1
mysql ×1
node.js ×1
python ×1
stream ×1