小编Ser*_*jik的帖子

如何扩展Django Group模型?

有没有办法扩展内置的Django Group对象以添加类似于扩展用户对象的方式的其他属性?使用用户对象,您可以执行以下操作:

class UserProfile(models.Model):
    user = models.OneToOneField(User)
Run Code Online (Sandbox Code Playgroud)

并将以下内容添加到settings.py文件中

AUTH_PROFILE_MODULE = 'app.UserProfile'
Run Code Online (Sandbox Code Playgroud)

哪个让你:

profile = User.objects.get(id=1).get_profile()
Run Code Online (Sandbox Code Playgroud)

是否有任何相当于扩展组的方法?如果没有,我可以采取另一种方法吗?

python django django-models

39
推荐指数
4
解决办法
3万
查看次数

如何使Django slugify与Unicode字符串正常工作?

我该怎么做才能防止slugify过滤器剥离非ASCII字母数字字符?(我正在使用Django 1.0.2)

cnprog.com有问题URL中的中文字符,所以我查看了他们的代码.他们没有slugify在模板中使用,而是在Question模型中调用此方法来获取永久链接

def get_absolute_url(self):
    return '%s%s' % (reverse('question', args=[self.id]), self.title)
Run Code Online (Sandbox Code Playgroud)

他们是否在诋毁网址?

python django unicode django-templates slug

37
推荐指数
6
解决办法
2万
查看次数

在Django/Algorithm中复制模型实例及其相关对象,以便重新复制对象

我有模特Books,ChaptersPages.它们都是由User:

from django.db import models

class Book(models.Model)
    author = models.ForeignKey('auth.User')

class Chapter(models.Model)
    author = models.ForeignKey('auth.User')
    book = models.ForeignKey(Book)

class Page(models.Model)
    author = models.ForeignKey('auth.User')
    book = models.ForeignKey(Book)
    chapter = models.ForeignKey(Chapter)
Run Code Online (Sandbox Code Playgroud)

我想做的是复制现有的Book并将其更新User给其他人.皱纹是我也想复制所有相关模型实例的Book-它所有的ChaptersPages以及!

当看到a时,事情变得非常棘手Page- 不仅新的Pages需要author更新他们的领域,而且他们还需要指向新的Chapter对象!

Django是否支持开箱即用的方式?复制模型的通用算法会是什么样的?

干杯,

约翰


更新:

上面给出的类只是一个例子来说明我遇到的问题!

python django django-models duplicates

35
推荐指数
5
解决办法
3万
查看次数

Django formsets:首先要求吗?

这些表格集表现出我想要的完全相反的行为.

我的观点设置如下:

def post(request): # TODO: handle vehicle formset
    VehicleFormSetFactory = formset_factory(VehicleForm, extra=1)
    if request.POST:
        vehicles_formset = VehicleFormSetFactory(request.POST)
    else:
        vehicles_formset = VehicleFormSetFactory()
Run Code Online (Sandbox Code Playgroud)

我的模板看起来像这样:

    <div id="vehicle_forms">
        {{ vehicles_formset.management_form }}
        {% for form in vehicles_formset.forms %}
            <h4>Vehicle {{forloop.counter}}</h4>
            <table>
                {% include "form.html" %}
            </table>
        {% endfor %}
    </div>
Run Code Online (Sandbox Code Playgroud)

这样它最初只生成一个表单,就像我想要的那样.但是我想要一个表格!

当我使用JavaScript动态添加空白表单时,需要vehicles_formset.empty_form所有这些额外的表单,这是我不想要的.

来自文档:

formset足够聪明,可以忽略未更改的额外表单.

这是第一种形式展示的行为(不是我想要的),而不是额外形式展示的行为(我想要的).

是否有一些我可以改变的属性,至少需要一个表格?

python django django-forms

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

ImportError:无法导入设置

我正在尝试在Django中开发一个示例项目,并在运行syncdb命令时收到错误.

这就是我的项目结构的样子:

/用户/ django_demo/godjango /预定:

manage.py
    registration/
        forms.py
        views.py
        models.py
        urls.py
    bookings/
        settings.py
        urls.py
Run Code Online (Sandbox Code Playgroud)

我的manage.py文件如下:

#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "bookings.settings")
    from django.core.management import execute_from_command_line
    execute_from_command_line(sys.argv)
Run Code Online (Sandbox Code Playgroud)

我的PYTHONPATH和DJANGO_SETTINGS_MODULE设置如下

$echo $DJANGO_SETTINGS_MODULE
bookings.settings

$ echo $PYTHONPATH
/Users/django_demo/godjango/bookings
Run Code Online (Sandbox Code Playgroud)

我的WSGI.py文件如下所示:

 import os
 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "bookings.settings")
 from django.core.wsgi import get_wsgi_application
 application = get_wsgi_application()
Run Code Online (Sandbox Code Playgroud)

当我运行python manage.py syncdb命令时,我收到以下错误.

Traceback (most recent call last):
  File "manage.py", line 11, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/django_demo/godjango/lib/python2.7/site-packages/django/core/management/__init__.py", line 443, in execute_from_command_line
    utility.execute()
  File "/Users/django_demo/godjango/lib/python2.7/site-packages/django/core/management/__init__.py", line 382, in execute …
Run Code Online (Sandbox Code Playgroud)

python django

34
推荐指数
3
解决办法
7万
查看次数

Django多数据库路由

我一直在使用手动数据库选择来处理一个有两个单独的数据库的项目.我在设置中定义了我的数据库.经过一些进一步的阅读后,似乎数据库路由实际上就是这样.但是,在阅读了这里的文档和一些相关帖子后,我比以往更加困惑.

在我的设置中,我有:

DATABASES = {
    'default': {
       .... 
    },
    'my_db2': {
       ....
    }
}

DATABASE_ROUTERS = ['myapp2.models.MyDB2Router',]
Run Code Online (Sandbox Code Playgroud)

我知道我必须像我这样定义我的路由器类(我认为在myapp2.models.py中):

class MyDB2Router(object):
"""A router to control all database operations on models in
the myapp2 application"""

def db_for_read(self, model, **hints):
    if model._meta.app_label == 'myapp2':
        return 'my_db2'
    return None

def db_for_write(self, model, **hints):
    if model._meta.app_label == 'myapp2':
        return 'my_db2'
    return None

def allow_relation(self, obj1, obj2, **hints):
    if obj1._meta.app_label == 'myapp2' or obj2._meta.app_label == 'myapp2':
        return True
    return None

def allow_syncdb(self, …
Run Code Online (Sandbox Code Playgroud)

python django

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

在Celery任务中运行Scrapy蜘蛛

我有一个Django站点,当用户请求它时会发生刮擦,我的代码在新进程中启动Scrapy蜘蛛独立脚本.当然,这不会增加用户.

像这样的东西:

class StandAloneSpider(Spider):
    #a regular spider

settings.overrides['LOG_ENABLED'] = True
#more settings can be changed...

crawler = CrawlerProcess( settings )
crawler.install()
crawler.configure()

spider = StandAloneSpider()

crawler.crawl( spider )
crawler.start()
Run Code Online (Sandbox Code Playgroud)

我决定使用Celery并使用worker来排队爬网请求.

但是,我遇到了Tornado反应堆无法重启的问题.第一个和第二个蜘蛛成功运行,但后续的蜘蛛会抛出ReactorNotRestartable错误.

任何人都可以在Celery框架内分享运行蜘蛛的任何提示?

python django scrapy celery

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

使用south来重构具有继承的Django模型

我想知道Django 南部是否可以进行以下迁移并仍保留数据.

之前:

我目前有两个应用程序,一个叫做tv,一个叫做电影,每个都有一个VideoFile模型(这里简化):

电视/ models.py:

class VideoFile(models.Model):
    show = models.ForeignKey(Show, blank=True, null=True)
    name = models.CharField(max_length=1024, blank=True)
    size = models.IntegerField(blank=True, null=True)
    ctime = models.DateTimeField(blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)

电影/ models.py:

class VideoFile(models.Model):
    movie = models.ForeignKey(Movie, blank=True, null=True)
    name = models.CharField(max_length=1024, blank=True)
    size = models.IntegerField(blank=True, null=True)
    ctime = models.DateTimeField(blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)

后:

因为两个videofile对象是如此相似,所以我想摆脱重复并在一个名为media的单独应用程序中创建一个新模型,该应用程序包含一个通用的VideoFile类并使用继承来扩展它:

媒体/ models.py:

class VideoFile(models.Model):
    name = models.CharField(max_length=1024, blank=True)
    size = models.IntegerField(blank=True, null=True)
    ctime = models.DateTimeField(blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)

电视/ models.py:

class VideoFile(media.models.VideoFile):
    show = models.ForeignKey(Show, blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)

电影/ models.py:

class VideoFile(media.models.VideoFile):
    movie = …
Run Code Online (Sandbox Code Playgroud)

python migration django django-south

32
推荐指数
2
解决办法
8807
查看次数

Django InlineModelAdmin:部分显示内联模型并链接到完整模型

我定义了几个模型:期刊,卷,volume_scanInfo等.

日志可以拥有更多卷,而卷可以拥有更多scanInfo.

我想做的是:

  • 在期刊的管理页面中我想要内联的卷列表(完成)
  • 将上一个列表的每个卷连接到其管理页面,我可以在其中显示表单以编辑卷以及内联的"扫描信息"列表.

所以我希望有类似的东西:

Journal #1 admin page
[name]
[publisher]
[url]
.....
list of volumes inline
    [volume 10] [..(other fields)..]   <a href="/link/to/volume/10">Full record</a>
    [volume 20] [..(other fields)..]   <a href="/link/to/volume/20">Full record</a>
Run Code Online (Sandbox Code Playgroud)

然后

Volume #20 admin page
[volume number]
[..(other fields)...]
......
list of the scan info inline
    [scan info 33] [..(other fields)..]   <a href="/link/to/scaninfo/33">Full record</a>
    [scan info 44] [..(other fields)..]   <a href="/link/to/scaninfo/44">Full record</a>
Run Code Online (Sandbox Code Playgroud)

我尝试做的是定义一个模型方法,该方法创建代码并尝试在管理中定义"volume inline"的类中使用它,但它不起作用.

换一种说法

模型"卷"有类似于:

def selflink(self):
    return '<a href="/admin/journaldb/volume/%s/">Full record</a>' % self.vid
selflink.allow_tags = True
Run Code Online (Sandbox Code Playgroud)

和 …

python django django-admin

32
推荐指数
4
解决办法
2万
查看次数

Django管理员的嵌套内联?

好吧,我有一个相当简单的设计.

class Update(models.Model):
    pub_date = models.DateField()
    title = models.CharField(max_length=512)

class Post(models.Model):
    update = models.ForeignKey(Update)
    body = models.TextField()
    order = models.PositiveIntegerField(blank=True)

class Media(models.Model):
    post = models.ForeignKey(Post)
    thumb = models.ImageField(upload_to='frontpage')
    fullImagePath = models.ImageField(upload_to='frontpage')
Run Code Online (Sandbox Code Playgroud)

是否有一种简单的方法允许用户在一个页面上创建更新?

想要的是让用户能够进入管理界面,添加新的更新,然后在编辑更新时添加一个或多个帖子,每个帖子都有一个或多个媒体项目.此外,我希望用户能够在更新中重新排序帖子.

我目前的尝试在admin.py中有以下内容:

class MediaInline(admin.StackedInline):
    model = Media

class PostAdmin(admin.ModelAdmin):
    inlines = [MediaInline,]
Run Code Online (Sandbox Code Playgroud)

这让用户添加一个新的Post项目,选择相关的Update,将Media项目添加到它,然后点击save - 这很好.但是没有办法在一个地方看到属于给定更新的所有帖子,这反过来意味着你不能在更新中浏览帖子.这对最终用户来说真的很混乱.

救命?

python django django-models django-admin

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