我想在序列化程序中添加一个字段,其中包含特定于发出当前请求的用户的信息(我不想为此创建单独的端点).这是我做的方式:
视图集:
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) 我想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) 我需要在标题文本的两侧创建一个标题长度相等的标题,并在行和文本之间创建一个固定大小的填充.文本会有所不同,因此不能设置宽度.这些行应占用标题容器中可用的所有剩余宽度.标题文字不得设置背景,因为它背后的背景会有所不同.像这样的东西:
-------------------------------------------------- -------一些文字----------------------------------------- ----------------
我用表解决了它:
<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/
从语义上讲,这是一个非常糟糕的解决方案,标题与表格数据无关.没有桌子你会怎么做?
总结一下(因为建议的解决方案都忽略了一个或多个要求):
我有一个 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()窗口函数的能力,但我最好的尝试是使用以下命令更新所有ranking行1:
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) 我发现自己使用以下模式作为在 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) 我有以下类型:
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) python ×3
django ×2
go ×2
constructor ×1
css ×1
default ×1
django-orm ×1
emacs ×1
html ×1
html-table ×1
interface ×1
jedi ×1
postgresql ×1
ruby ×1
types ×1
virtualenv ×1