小编Rob*_*jic的帖子

将用户特定字段添加到Django REST Framework序列化程序

我想在序列化程序中添加一个字段,其中包含特定于发出当前请求的用户的信息(我不想为此创建单独的端点).这是我做的方式:

视图集:

class ArticleViewSet(viewsets.ModelViewSet):
    queryset = Article.objects.all()
    serializer_class = ArticleSerializer
    filter_class = ArticleFilterSet

    def prefetch_likes(self, ids):
        self.current_user_likes = dict([(like.article_id, like.pk) for like in Like.objects.filter(user=self.request.user, article_id__in=ids)])

    def get_object(self, queryset=None):
        article = super(ArticleViewSet, self).get_object(queryset)
        self.prefetch_likes([article.pk])
        return article

    def paginate_queryset(self, queryset, page_size=None):
        page = super(ArticleViewSet, self).paginate_queryset(queryset, page_size)
        if page is None:
            return None

        ids = [article.pk for article in page.object_list]
        self.prefetch_likes(ids)

        return page
Run Code Online (Sandbox Code Playgroud)

序列化器:

class ArticleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Article

    def to_native(self, obj):
        ret = super(ArticleSerializer, self).to_native(obj)

        if obj:
            view = self.context['view'] …
Run Code Online (Sandbox Code Playgroud)

python django django-rest-framework

12
推荐指数
2
解决办法
9381
查看次数

如何让emacs-jedi使用项目特定的virtualenvs

我想emacs-jedi检测我在不同项目中编辑文件的时间,并使用相应的virtualenv(如果可用).按照惯例,我的virtualenvs与我的项目同名.它们位于$HOME/.virtualenvs/

我找到了kenobi.el,但它假设在项目根目录的bin目录中找到了virtualenvs.它还有一些我根本不需要的其他功能.

在kenobi.el的启发下,我为jedi写了以下初始化.它工作得很好,但并不完美.

如果我A从我的项目导入库,并A导入B.我能够跳进定义的定义A,但一旦那里,我就无法继续跳入定义B.

我的初始化:

(defun project-directory (buffer-name)
  (let ((git-dir (file-name-directory buffer-name)))
    (while (and (not (file-exists-p (concat git-dir ".git")))
                git-dir)
      (setq git-dir
            (if (equal git-dir "/")
                nil
              (file-name-directory (directory-file-name git-dir)))))
    git-dir))

(defun project-name (buffer-name)
  (let ((git-dir (project-directory buffer-name)))
    (if git-dir
        (file-name-nondirectory
         (directory-file-name git-dir))
      nil)))

(defun virtualenv-directory (buffer-name)
  (let ((venv-dir (expand-file-name
                   (concat "~/.virtualenvs/" (project-name buffer-name)))))
    (if (and venv-dir (file-exists-p venv-dir))
        venv-dir
      nil)))    

(defun jedi-setup-args ()
  (let ((venv-dir (virtualenv-directory …
Run Code Online (Sandbox Code Playgroud)

python emacs jedi virtualenv

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

中心文本,两侧都有类似hr的线条,不使用表格

我需要在标题文本的两侧创建一个标题长度相等的标题,并在行和文本之间创建一个固定大小的填充.文本会有所不同,因此不能设置宽度.这些行应占用标题容器中可用的所有剩余宽度.标题文字不得设置背景,因为它背后的背景会有所不同.像这样的东西:

-------------------------------------------------- -------一些文字----------------------------------------- ----------------

我用表解决了它:

<table width="100%">
  <td><hr /></td>
  <td style="width:1px; padding: 0 10px; white-space: nowrap;">Some text</td>
  <td><hr /></td>
</table>?
Run Code Online (Sandbox Code Playgroud)

你可以在这里试试:http://jsfiddle.net/md2dF/3/

从语义上讲,这是一个非常糟糕的解决方案,标题与表格数据无关.没有桌子你会怎么做?

总结一下(因为建议的解决方案都忽略了一个或多个要求):

  • 标题不得有固定的宽度
  • 标题文字不得有背景
  • 标题文字不得有固定的宽度
  • 文本两侧的线条必须占用所有剩余宽度
  • 线条和文本之间的填充必须具有固定的宽度
  • 如有疑问,请查看http://jsfiddle.net/md2dF/3/

html css html-table

8
推荐指数
3
解决办法
2万
查看次数

根据同一模型上的子查询生成的行数更新 Django 模型

我有一个 PostgreSQLUPDATE查询,它根据同一表中global_ranking按另一个字段 ( ) 排序的每行的字段 ( ) 更新表中每一行的字段 ( )。此外,更新是分区的,因此每行的排名仅相对于属于同一 的那些行。ROW_NUMBER()ratinglanguage

简而言之,我根据每个玩家当前的评分来更新游戏中每个玩家的排名。

PostgreSQL 查询如下所示:

UPDATE stats_userstats
SET    
    global_ranking = sub.row_number
FROM  (
    SELECT id, ROW_NUMBER() OVER (
        PARTITION BY language
        ORDER BY rating DESC
    ) AS row_number
    FROM stats_userstats
) sub
WHERE stats_userstats.id = sub.id;
Run Code Online (Sandbox Code Playgroud)

我也在使用 Django,如果可能的话,学习如何使用 Django ORM 表达此查询会很有趣。

起初,Django 似乎拥有表达查询所需的一切,包括使用 PostgreSQL 的ROW_NUMBER()窗口函数的能力,但我最好的尝试是使用以下命令更新所有ranking1

from django.db.models import F, OuterRef, Subquery
from django.db.models.expressions import Window
from django.db.models.functions …
Run Code Online (Sandbox Code Playgroud)

python django postgresql django-models django-orm

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

Go struct 构造函数中具有默认值的可选参数

我发现自己使用以下模式作为在 Go 结构构造函数中使用默认值获取可选参数的方法:

package main

import (
    "fmt"
)

type Object struct {
    Type int
    Name string
}

func NewObject(obj *Object) *Object {
    if obj == nil {
        obj = &Object{}
    }
    // Type has a default of 1
    if obj.Type == 0 {
        obj.Type = 1
    }
    return obj
}

func main() {
    // create object with Name="foo" and Type=1
    obj1 := NewObject(&Object{Name: "foo"})
    fmt.Println(obj1)

    // create object with Name="" and Type=1
    obj2 := NewObject(nil)
    fmt.Println(obj2)

    // create object …
Run Code Online (Sandbox Code Playgroud)

constructor default go

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

调用Go函数接受带有一层struct B的接口A的切片(B实现A)

我有以下类型:

type Statement interface {
    Say() string
}

type Quote struct {
    quote string
}

func (p Quote) Say() string {
    return p.quote
}

func Replay(conversation []Statement) {
    for _, statement := range conversation {
        fmt.Println(statement.Say())
    }
}
Run Code Online (Sandbox Code Playgroud)

我想我已经很好地掌握了为什么接受类型参数的函数[]Statement无法调用[]Quote; 即使Quote实现Statement,[]Quote也没有实现[]Statement.[]Statement甚至不是一个界面.它有类型slice of Statement.当Go隐式地从类型转换为接口类型时,它不会从类型A切片到接口切片的隐式转换B.

我们可以明确地将引号转换为语句:

conversation := []Quote{
    Quote{"Nice Guy Eddie: C'mon, throw in a buck!"},
    Quote{"Mr. Pink: Uh-uh, I don't tip."}, …
Run Code Online (Sandbox Code Playgroud)

types interface go

5
推荐指数
2
解决办法
186
查看次数

如何在一段时间后解除Rails Flash消息?

我想设置闪存通知显示给用户的秒数,然后自动关闭.

ruby ruby-on-rails

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