小编Jak*_*ake的帖子

django过滤外键对象中的字段

鉴于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)

如何根据没有任何选择的问题进行过滤?

python django

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

使用 require 与使用 fs.readFile 从文件中获取 JSON 的优点和缺点是什么

如果我在项目中使用 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 是异步的

node.js

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

在mongo中按ID或用户名查找

我正在尝试按用户名或_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)

mongoose mongodb node.js

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

标签 统计

node.js ×2

django ×1

mongodb ×1

mongoose ×1

python ×1