小编Ty.*_*Ty.的帖子

Django:将博客条目视图增加一个.这有效吗?

我在索引视图中有以下代码.

latest_entry_list = Entry.objects.filter(is_published=True).order_by('-date_published')[:10]
for entry in latest_entry_list:
    entry.views = entry.views + 1
    entry.save()
Run Code Online (Sandbox Code Playgroud)

如果初始查询返回了十行(限制),那么保存问题10是否会更新对数据库的更新调用,或者Django是否"足够聪明"以仅发出一次更新调用?

是否有更有效的方法来实现这一结果?

python database django performance

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

Django:在内存中打开上传的文件; 在Form Clean方法中?

我需要在Form clean方法中验证上传的XML文件的内容,但是我无法打开该文件进行验证.它接缝,在clean方法中,文件尚未从内存(或临时目录)移动到目标目录.

例如,以下代码不起作用,因为该文件尚未移动到该目标.它仍然在内存(或临时目录)中:

xml_file = cleaned_data.get('xml_file')
xml_file_absolute = '%(1)s%(2)s' % {'1': settings.MEDIA_ROOT, '2': xml_file}
xml_size = str(os.path.getsize(xml_file_absolute))
Run Code Online (Sandbox Code Playgroud)

当我查看"cleaning_data"变量时,它会显示:

{'xml_file': <InMemoryUploadedFile: texting.nzb (application/octet-stream)>}
Run Code Online (Sandbox Code Playgroud)

cleaned_data.get('xml_file') 只返回"texting.nzb"作为字符串.

是否有另一种方法来访问内存(或临时目录)中的文件?


同样,这是我的Form的clean方法,它绑定到默认的管理视图.我一次又一次地被告知所有验证都应该在表单中处理,而不是视图.正确?

python django

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

Django:访问models.filefield(upload_to)位置的主键

我想使用条目的主键保存我的文件.

这是我的代码:

def get_nzb_filename(instance, filename):
    if not instance.pk:
        instance.save() # Does not work.
    name_slug = re.sub('[^a-zA-Z0-9]', '-', instance.name).strip('-').lower()
    name_slug = re.sub('[-]+', '-', name_slug)
    return u'files/%s_%s.nzb' % (instance.pk, name_slug)

class File(models.Model):
    nzb = models.FileField(upload_to=get_nzb_filename)
    name = models.CharField(max_length=256)
Run Code Online (Sandbox Code Playgroud)

我知道第一次保存对象时主键不可用,所以我愿意采取额外的命中来保存对象只是为了得到主键,然后继续.

上面的代码不起作用.它会引发以下错误:

maximum recursion depth exceeded while calling a Python object
Run Code Online (Sandbox Code Playgroud)

我假设这是一个无限循环.调用该save方法将调用该get_nzb_filename方法,该方法将再次调用该save方法,依此类推.

我正在使用最新版本的Django主干.

如何获取主键以便我可以使用它来保存上传的文件?


更新@muhuk:

我喜欢你的解决方案.你能帮我实现吗?我已将我的代码更新为以下内容,错误是'File' object has no attribute 'create'.也许我正在使用你在上下文中写的东西?

def create_with_pk(self):
    instance = self.create()
    instance.save()
    return instance

def get_nzb_filename(instance, filename):
    if not instance.pk:
        create_with_pk(instance) …
Run Code Online (Sandbox Code Playgroud)

python django file-io

10
推荐指数
1
解决办法
4899
查看次数

Django部署:削减Apache的开销

我有一个小型VPS服务器,它有一个Nginx前端,提供静态媒体文件,并将Django请求传递回运行mod_wsgi的Apache 2.2 prefork MPM服务器.

有一个(非常)小网站加载和工作,它目前使用143MB的256MB RAM.

使用该top命令,我可以看到Apache使用了52.9%的可用RAM,其中memcache使用了2.1%.

考虑到我打算在这台服务器上安装相当多的Django项目,我想知道我是否可以做些什么来削减Apache使用的RAM量?

apache deployment django mod-wsgi

9
推荐指数
2
解决办法
4578
查看次数

Django:上传文件已锁定.无法重命名

我正在尝试重命名文件,因为它已在模型的save方法中上传.我正在将文件重命名为文件主键和文件标题的组合.

我首先上传文件,上传新文件,文件或文件标题没有变化时都能正常工作.

但是,当文件的标题更改,并且系统尝试将旧文件重命名为新路径时,我收到以下错误:

WindowsError at /admin/main/file/1/
(32, 'The process cannot access the file because it is being used by another process')
Run Code Online (Sandbox Code Playgroud)

我真的不知道怎么解决这个问题.我试过把文件复制到新路径.这有效,但我不知道我可以删除旧版本.

缩短型号:

class File(models.Model):
    nzb = models.FileField(upload_to='files/')
    name = models.CharField(max_length=256)
    name_slug = models.CharField(max_length=256, blank=True, null=True, editable=False)

    def save(self):
        # Create the name slug.
        self.name_slug = re.sub('[^a-zA-Z0-9]', '-', self.name).strip('-').lower()
        self.name_slug = re.sub('[-]+', '-', self.name_slug)

        # Need the primary key for naming the file.
        super(File, self).save()

        # Create the system paths we need.
        orignal_nzb = u'%(1)s%(2)s' % {'1': settings.MEDIA_ROOT, '2': self.nzb} …
Run Code Online (Sandbox Code Playgroud)

python django file-io

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

如何使用Django执行SQL LEFT JOIN?

基本上我需要每个条目评论的计数:

SELECT e.*, COUNT(c.id) as comments FROM blog_entry e LEFT JOIN blog_comment c ON e.id = c.entry_id GROUP BY e.id, e.name, e.name_slug, e.date_published, e.category, e.image, e.body, e.is_published, e.views, e.subscription_sent ORDER BY e.date_published DESC LIMIT 15;
Run Code Online (Sandbox Code Playgroud)

但我不知道如何使用Django来解决这个问题.

这是我到目前为止,它完美的工作,除了没有评论计数.有人能指出我正确的方向使用Django进行这样的连接吗?

from project.blog.models import Entry, Comment

def index(request):
    latest_entry_list = Entry.objects.filter(is_published=True).order_by('-date_published')[:15]
    return render_to_response('blog/index.html', {'latest_entry_list': latest_entry_list)
Run Code Online (Sandbox Code Playgroud)

database django postgresql performance

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

删除上传的文件时出现Django"SuspiciousOperation"错误

我正在使用manage.py runserver命令提供文件在Windows XP上使用Django进行开发.Apache没有涉及.当我登录管理并尝试删除文件时,出现"SuspiciousOperation"错误.

这是追溯:http:
//dpaste.com/123112/

这是我的完整型号:http:
//dpaste.com/hold/123110/

如何摆脱这个"SuspiciousOperation"错误?

编辑:这是我的媒体设置:

MEDIA_ROOT = 'C:/Server/Projects/postnzb/static/'
MEDIA_URL = '/static/'
Run Code Online (Sandbox Code Playgroud)

python windows django

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

Django:生成博客的活动条目列表.这有效吗?

以下查询执行我想要它做的事情,但是,我不知道它是否有效.我浏览了Django聚合文档,将它放在一起,查看了查询,并像混淆的狗一样向侧面倾斜.

查询实际执行的操作是获取已发布的条目"名称"和"name_slug",其中包含一个或多个已批准的注释,并按最新注释的"date_published"字段对结果进行排序.结果是最近活跃的Entry的列表.

所以几个问题.(1)你在查询中看到的只是一个普通的禁忌.(2)有没有办法可以看到查询数据库的RAW SQL?

楷模:

class Entry(models.Model):
    name = models.CharField(max_length=200, unique=True)
    name_slug = models.SlugField(max_length=200, blank=True, editable=False, unique=True)
    date_published = models.DateTimeField()
    is_published = models.BooleanField(default=False)

class Comment(models.Model):
    entry = models.ForeignKey('Entry')
    date_published = models.DateTimeField()
    approved_choices = (('N', 'No'), ('Y', 'Yes'), ('M', 'Needs Moderation'),)
    approved = models.CharField(max_length=1, choices=approved_choices, default='N')
Run Code Online (Sandbox Code Playgroud)

查询:

active_entry_list = Entry.objects
    .values('name', 'name_slug')
    .filter(is_published=True, comment__approved='Y')
    .annotate(latest_comment=Max('comment__date_published'),comments=Count('comment'))
    .filter(comments__gte=1)
    .order_by('-latest_comment')
    [:6]
Run Code Online (Sandbox Code Playgroud)

sql database django performance

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