鉴于django民意调查教程中的以下模型:
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def __str__(self):
return self.question_text
def was_published_recently(self):
now = timezone.now()
return now - datetime.timedelta(days=1) <= self.pub_date <= now
was_published_recently.admin_order_field = 'pub_date'
was_published_recently.boolean = True
was_published_recently.short_description = 'Published recently'
class Choice(models.Model):
question = models.ForeignKey(Question)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
def __str__(self):
return self.choice_text
Run Code Online (Sandbox Code Playgroud)
我想能够排除没有的问题和教程中建议的选择.我一直在玩Filter,但我无法理解,我试过:
def get_queryset(self):
return Question.objects.filter(pub_date__lte=timezone.now(), choice__count__gt=0)
Run Code Online (Sandbox Code Playgroud)
但我得到了
Relation fields do not support nested lookups
Run Code Online (Sandbox Code Playgroud)
如何根据没有任何选择的问题进行过滤?
如果我在项目中使用 JSON 数据,最好使用 readFile,如下所示:
var fs = require('fs');
var obj;
fs.readFile('file', 'utf8', function (err, data) {
if (err) throw err;
obj = JSON.parse(data);
});
Run Code Online (Sandbox Code Playgroud)
或者只使用 require
var config = require('./file.json');
Run Code Online (Sandbox Code Playgroud)
我尝试过寻找性能比较,但找不到任何结果。在FredKSchott 的这篇文章中,作者深入研究了 require 函数,看起来它可以通过缓存提高性能,但它看起来是同步的,而 fs.readFile 是异步的
我正在尝试按用户名或_id这样查找
exports.getUser = function (req, res){
User.find({ $or: [ {username:req.params.id}, {_id:req.params.id} ] })
.exec(function (err, collections) {
res.send(collections);
});
};
Run Code Online (Sandbox Code Playgroud)
当我通过_id搜索但是用户名失败时它会起作用,因为它无法返回有效的OjectID.我试着像这样做两个单独的查询
exports.getUser = function (req, res){
User.findOne({username:req.params.id}).exec(function (err, user) {
if (user)
res.send(user);
});
User.findById({_id:req.params.id}).exec(function (err, user) {
if (user)
res.send(user);
});
};
Run Code Online (Sandbox Code Playgroud)
但如果用户不存在,则会挂起,因为它从不发送响应.由于节点是异步的,我得到,Error: Can't set headers after they are sent.如果我添加
else
res.sendStatus(400);
Run Code Online (Sandbox Code Playgroud)
到findById查询.我想不出任何其他方法来解决这个问题.我在MongoDB Node中检查了正则表达式,检查objectid是否有效
exports.getUser = function (req, res){
var checkForHexRegExp = new RegExp("^[0-9a-fA-F]{24}$");
if(checkForHexRegExp.test(req.params.id)){
User.findById({_id:req.params.id}).exec(function (err, user) {
if (user)
res.send(user);
});
} …Run Code Online (Sandbox Code Playgroud)