在Django的管理员中,我想禁用 "选择要更改的项目"页面上提供的链接,以便用户无法去任何地方编辑项目.(我将限制用户可以对此列表执行的操作到一组下拉操作 - 没有实际编辑字段).
我看到Django能够选择显示链接的字段,但是,我看不出我怎么也没有.
class HitAdmin(admin.ModelAdmin):
list_display = ('user','ip','user_agent','hitcount')
search_fields = ('ip','user_agent')
date_hierarchy = 'created'
list_display_links = [] # doesn't work, goes to default
Run Code Online (Sandbox Code Playgroud)
任何想法如何获取我的对象列表没有任何链接编辑?
我想这必须有一个简单的答案,但我正在努力:我想拿一个url(输出json)并在python中的可用字典中获取数据.我被困在最后一步.
>>> import urllib2
>>> import simplejson
>>> req = urllib2.Request("http://vimeo.com/api/v2/video/38356.json", None, {'user-agent':'syncstream/vimeo'})
>>> opener = urllib2.build_opener()
>>> f = opener.open(req)
>>> f.read() # this works
'[{"id":"38356","title":"Forgetfulness - Billy Collins Animated Poetry","description":"US Poet Laureate Billy Collins reads his poem ","url":"http:\\/\\/vimeo.com\\/38356","upload_date":"2006-01-24 15:21:03","thumbnail_small":"http:\\/\\/80.media.vimeo.com\\/d1\\/5\\/47\\/74\\/thumbnail-4774968.jpg","thumbnail_medium":"http:\\/\\/80.media.vimeo.com\\/d1\\/5\\/46\\/85\\/thumbnail-4685118.jpg","thumbnail_large":"http:\\/\\/images.vimeo.com\\/87\\/39\\/873998\\/873998_640x480.jpg","user_name":"smjwt","user_url":"http:\\/\\/vimeo.com\\/smjwt","user_portrait_small":"http:\\/\\/bitcast.vimeo.com\\/vimeo\\/portraits\\/defaults\\/d.30.jpg","user_portrait_medium":"http:\\/\\/bitcast.vimeo.com\\/vimeo\\/portraits\\/defaults\\/d.75.jpg","user_portrait_large":"http:\\/\\/bitcast.vimeo.com\\/vimeo\\/portraits\\/defaults\\/d.100.jpg","user_portrait_huge":"http:\\/\\/bitcast.vimeo.com\\/vimeo\\/portraits\\/defaults\\/d.300.jpg","stats_number_of_likes":"281","stats_number_of_plays":"9173","stats_number_of_comments":23,"duration":"112","width":"320","height":"240","tags":"poetry, poet, online poetry, famous poet, video poetry, modern poetry, famous poem, poetry sites, poetry websites, audio poetry, american poet, animation clips, american poetry, free poetry sites, animation art, free poetry, animated clips, poem, poet laureate"}]'
>>> simplejson.load(f)
Traceback (most …Run Code Online (Sandbox Code Playgroud) 我确信有人在那里有一个可插拔的应用程序(或教程)近似于此,但我找不到它:我希望能够跟踪特定对象的"视图"数量(就像这里的问题一样)在stackoverflow上有一个"查看计数").
如果用户未登录,我不介意尝试放置cookie(或记录IP),以便他们不会通过刷新页面而无意中运行视图计数; 如果用户已登录,则只允许他们跨会话/浏览器/ IP地址进行一次"查看".我认为我不需要任何比这更好的东西.
我认为最好的方法是使用与我想要跟踪的各种模型分离并使用F表达式(各种类型)的中间件 - 其他关于stackoverlow的问题已提到这个(1)(2)(3) .
但是我想知道这个代码是否已经存在于野外 - 因为我不是最精明的编码器,我相信有人可以做得更好.微笑.
你看到了吗?
我试图在vim中使用snipMate和pydiction - 但是,两者都使用<tab>密钥来执行他们的天才 - 自动完成 - 片段渲染 - 良好 - 我渴望.
安装pydiction时,snipMate停止工作.我认为它是因为他们不能拥有<tab>密钥.我怎样才能让他们一起工作?
我不介意将其中一个映射到一个不同的键,但我不确定如何做到这一点...(可能是对<ctrl-n>键的嘲讽所以它模仿vim的自动完成?).
这是相关的.vimrc:
filetype indent plugin on
autocmd FileType python set ft=python.django
autocmd FileType html set ft=html.django_template
let g:pydiction_location = '~/.vim/ftplugin/pydiction-1.2/complete-dict'
Run Code Online (Sandbox Code Playgroud) 我有一个带有字典的对象,我想通过__getitem__它来访问并迭代(仅值,键无关紧要),但我不知道该怎么做.
例如:
Python 2.5.2 (r252:60911, Jul 22 2009, 15:33:10)
>>> class Library(object):
... def __init__(self):
... self.books = { 'title' : object, 'title2' : object, 'title3' : object, }
... def __getitem__(self, i):
... return self.books[i]
...
>>> library = Library()
>>> library['title']
<type 'object'>
>>> for book in library:
... print book
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in __getitem__
KeyError: 0
>>>
Run Code Online (Sandbox Code Playgroud)
如何告诉它只需返回object字典中的每个项目(键无关紧要)?
我正在使用命令行python脚本 - 在整个脚本中,我有很多信息,我正在print终端窗口,以便我可以跟随正在发生的事情.
使用OptionParser我想添加一个--quiet选项,这样我就可以使所有输出静音.我要寻找一个Python化的方式去了解整个脚本执行,这样我不会落得做这样的事情:
if not QUIET: # global variable set by OptionParser
print " my output "
Run Code Online (Sandbox Code Playgroud)
我是python的新手,确定有更好的方法.想法?
在自定义表单中,如何验证模型字段的唯一性(即已unique=True设置)?
我知道django的ModelForm自动执行validate_unique()在BaseModelForm的clean()方法中调用的函数- 因此,当使用ModelForm时,这将被正确处理(就像在Admin中一样).
但是,我是从头开始创建自己的表单,并想知道如何自己处理这个问题?我认为我最大的绊脚石是知道在清理数据时哪个对象附加到表单上...
一些代码:
class UserProfile(CreatedModifiedModel):
user = models.ForeignKey(User, unique=True)
display_name = models.CharField('Display Name',max_length=30,
blank=True,unique=True)
class EditUserProfileForm(forms.Form):
display_name = forms.CharField(required=False,max_length=30)
# "notifications" are created from a different model, not the UserProfile
notifications = forms.MultipleChoiceField(
label="Email Notifications",
required=False,
widget=forms.CheckboxSelectMultiple,)
def clean_display_name(self):
# how do I run my own validate_unique() on this form?
# how do I know which UserProfile object I am working with?
# more code follows, including the __init__ which sets up …Run Code Online (Sandbox Code Playgroud) 我正在围绕这个问题,需要一些帮助.我继续得到naive timezone警告.不确定我做错了什么!精氨酸.
这是警告:
/django/db/models/fields/__init__.py:1222: RuntimeWarning: DateTimeField Video.modified received a naive datetime (2014-10-07 00:00:00) while time zone support is active.
RuntimeWarning)
Run Code Online (Sandbox Code Playgroud)
这是模型代码(稍微编辑):
from django.db import models
from django.utils import timezone
class ItemBase(models.Model):
created = models.DateTimeField(editable=False)
modified = models.DateTimeField(editable=False)
class Meta:
abstract = True
def save(self, *args, **kwargs):
"""Updates timestamps on save"""
if not self.id:
self.created = timezone.now()
self.modified = timezone.now()
return super(ItemBase, self).save(*args, **kwargs)
class Video(ItemBase):
pass
Run Code Online (Sandbox Code Playgroud)
以及我的设置文件的相关(我认为)部分:
TIME_ZONE = 'UTC'
USE_TZ = True
Run Code Online (Sandbox Code Playgroud)
我是python的新手并且取得了一些进展threading- 我正在做一些音乐文件转换,并希望能够在我的机器上使用多个核心(每个核心一个活动的转换线程).
class EncodeThread(threading.Thread):
# this is hacked together a bit, but should give you an idea
def run(self):
decode = subprocess.Popen(["flac","--decode","--stdout",self.src],
stdout=subprocess.PIPE)
encode = subprocess.Popen(["lame","--quiet","-",self.dest],
stdin=decode.stdout)
encode.communicate()
# some other code puts these threads with various src/dest pairs in a list
for proc in threads: # `threads` is my list of `threading.Thread` objects
proc.start()
Run Code Online (Sandbox Code Playgroud)
一切正常,所有文件都被编码,勇敢!...但是,所有进程立即生成,但我只想一次运行两个(每个核心一个).一旦完成,我希望它继续到列表中的下一个,直到它完成,然后继续该程序.
我该怎么做呢?
(我查看了线程池和队列函数,但我找不到简单的答案.)
编辑:也许我应该添加我的每个线程subprocess.Popen用于运行单独的命令行解码器(flac)管道输出到stdout,它被送入命令行编码器(lame/mp3).
我试图通过会话信息跟踪AnonymousUsers(如果可能的话).
在旧版本的Django中,我可以做类似的事情:
def my_view(request):
# in case the user wasn't logged in, create/save a session
if not request.session.session_key:
request.session.save()
# would give me the key and on the next load it would persist
session_key = request.session.session_key
Run Code Online (Sandbox Code Playgroud)
但是对于1.6(我已经离开游戏一段时间),每次请求通过时都会产生一个新的唯一会话ID.没有持久性.我试着做一点阅读,但是因为我没有参加Django练习而进入了圈子.
如何保持会话?我需要编写自己的cookie处理吗?
python ×6
django ×5
autocomplete ×1
datetime ×1
django-admin ×1
django-forms ×1
iterator ×1
json ×1
modeladmin ×1
simplejson ×1
sqlite ×1
timezone ×1
urllib2 ×1
views ×1
vim ×1