小编Ser*_*jik的帖子

覆盖Django ModelForm中的save方法

我无法覆盖ModelForm保存方法.这是我收到的错误:

Exception Type:     TypeError  
Exception Value:    save() got an unexpected keyword argument 'commit'
Run Code Online (Sandbox Code Playgroud)

我的目的是让表单为3个字段提交许多值,然后为这些字段的每个组合创建一个对象,并保存每个对象.在正确的方向上有用的推动将是王牌.

文件 models.py

class CallResultType(models.Model):
    id = models.AutoField(db_column='icontact_result_code_type_id', primary_key=True)
    callResult = models.ForeignKey('CallResult', db_column='icontact_result_code_id')
    campaign = models.ForeignKey('Campaign', db_column='icampaign_id')
    callType = models.ForeignKey('CallType', db_column='icall_type_id')
    agent = models.BooleanField(db_column='bagent', default=True)
    teamLeader = models.BooleanField(db_column='bTeamLeader', default=True)
    active = models.BooleanField(db_column='bactive', default=True)
Run Code Online (Sandbox Code Playgroud)

文件 forms.py

from django.forms import ModelForm, ModelMultipleChoiceField
from callresults.models import *

class CallResultTypeForm(ModelForm):
    callResult = ModelMultipleChoiceField(queryset=CallResult.objects.all())
    campaign = ModelMultipleChoiceField(queryset=Campaign.objects.all())
    callType = ModelMultipleChoiceField(queryset=CallType.objects.all())

    def save(self, force_insert=False, force_update=False):
        for cr in self.callResult:
            for c …
Run Code Online (Sandbox Code Playgroud)

python django django-forms django-admin

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

使用apache和mod_wsgi的多个django站点

我想举办它使用Debian的5同一服务器下的几个场所,说我有site1,site2site3,并承担我的IP是155.55.55.1:

site1: 155.55.55.1:80  , script at /opt/django/site1/
site2: 155.55.55.1:8080, script at /opt/django/site2/
site3: 155.55.55.1:8090, script at /opt/django/site3/
Run Code Online (Sandbox Code Playgroud)

这是我的apache默认值:

<VirtualHost *:80>
    ServerName /
    ServerAlias  */
    DocumentRoot /opt/django/site1/
    LogLevel warn
    WSGIScriptAlias / /opt/django/site1/apache/django.wsgi
    Alias /media /opt/django/site1/media/statics
    Alias /admin_media  /home/myuser/Django-1.1/django/contrib/admin/media 
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/usr/share/phpmyadmin"
    ServerName /phpmyadmin
    Alias /phpmyadmin /usr/share/phpmyadmin
    <Directory /usr/share/phpmyadmin>
        Options Indexes FollowSymLinks
        AllowOverride None
        Order Deny,Allow
        Allow from all
    </Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

这是我的wsgi配置site1,在/opt/django/site1/apache/django.wsgi:

import os, sys
import django.core.handlers.wsgi

sys.path.append('/opt/django') …
Run Code Online (Sandbox Code Playgroud)

python django hosting mod-wsgi apache2

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

使用django admin进行一对多内联选择

我有一个标准的多对一关系设置.有很多字段,但就我们的目的而言,相关模型是:

class Class(models.Model):
    name = models.CharField(max_length=128)

class Student(models.Model):
    class = models.ForeignKey(Class)
    name = models.CharField(max_length=128)
    address = models.CharField(max_length=128)
    # ...etc
Run Code Online (Sandbox Code Playgroud)

我创建了一个管理员,它运行得很好.在我编辑学生时,它甚至可以自动设置班级.但是,当我去创建/编辑一个类时,我得到的只是名称的输入框.

有没有办法添加一个框/字段,可以从Class管理页面添加学生作为Class的成员?我可以在线创建一个表单,但那就是创建新的学生.我已经创建了所有学生,我只是在寻找一种快速方法,将多个现有学生添加到不同的班级.

python django django-models django-admin

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

Django admin - 内联内联(或者,一次三个模型编辑)

我有一组看起来像这样的模型:

class Page(models.Model):
    title = models.CharField(max_length=255)

class LinkSection(models.Model):
    page = models.ForeignKey(Page)
    title = models.CharField(max_length=255)

class Link(models.Model):
    linksection = models.ForeignKey(LinkSection)
    text = models.CharField(max_length=255)
    url = models.URLField()
Run Code Online (Sandbox Code Playgroud)

和一个看起来像这样的admin.py:

class LinkInline(admin.TabularInline):
    model = Link
class LinkSectionInline(admin.TabularInline):
    model = LinkSection
    inlines = [ LinkInline, ]
class PageAdmin(admin.ModelAdmin):
    inlines = [ LinkSectionInline, ]
Run Code Online (Sandbox Code Playgroud)

我的目标是获得一个管理界面,让我可以在一个页面上编辑所有内容.这个模型结构的最终结果是生成的东西生成一个看起来或多或少的视图+模板:

<h1>{{page.title}}</h1>
{% for ls in page.linksection_set.objects.all %}
<div>
    <h2>{{ls.title}}</h2>
    <ul>
         {% for l in ls.link_set.objects.all %}
        <li><a href="{{l.url}}">{{l.title}}</a></li>
         {% endfor %}
    </ul>
</div>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

据我所知,我知道Django管理员中的inline-in-an-inline技巧失败了.有谁知道允许这种三级模型编辑的方法?提前致谢.

python django django-models django-admin inlines

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

在Django中按日期计算记录数

我有一个类似于以下的模型:

class Review(models.Model):
    venue = models.ForeignKey(Venue, db_index=True)
    review = models.TextField()  
    datetime_created = models.DateTimeField(default=datetime.now)
Run Code Online (Sandbox Code Playgroud)

我想查询数据库以获得按天分组的场地的评论总数.MySQL查询将是:

SELECT DATE(datetime_created), count(id) 
FROM REVIEW 
WHERE venue_id = 2
GROUP BY DATE(datetime_created);
Run Code Online (Sandbox Code Playgroud)

在Django中实现这一目标的最佳方法是什么?我可以用

Review.objects.filter(venue__pk=2)
Run Code Online (Sandbox Code Playgroud)

并在视图中解析结果,但这对我来说似乎不对.

python django django-models django-queryset django-1.1

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

Django管理员和显示缩略图图像

我试图在Django管理员中显示缩略图,但我只能看到图像的路径,但不能看到渲染的图像.我不知道我做错了什么.

服务器媒体URL:

from django.conf import settings
(r'^public/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT}),
Run Code Online (Sandbox Code Playgroud)

功能模型:

def image_img(self):
        if self.image:
            return u'<img src="%s" />' % self.image.url_125x125
        else:
            return '(Sin imagen)'
        image_img.short_description = 'Thumb'
        image_img.allow_tags = True
Run Code Online (Sandbox Code Playgroud)

admin.py:

class ImagesAdmin(admin.ModelAdmin):

    list_display= ('image_img','product',) 
Run Code Online (Sandbox Code Playgroud)

结果如下:

<img src="http://127.0.0.1:8000/public/product_images/6a00d8341c630a53ef0120a556b3b4970c.125x125.jpg" />
Run Code Online (Sandbox Code Playgroud)

python django django-admin

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

如何防止灯具与django post_save信号代码冲突?

在我的应用程序中,我想在新用户注册时在某些表中创建条目.例如,我想创建一个userprofile,然后引用他们的公司和其他一些记录.我用post_save信号实现了这个:

def callback_create_profile(sender, **kwargs):
    # check if we are creating a new User
    if kwargs.get('created', True):
        user = kwargs.get('instance')
        company = Company.objects.create(name="My Company")
        employee = Employee.objects.create(company=company, name_first=user.first_name, name_last=user.last_name)
        profile = UserProfile.objects.create(user=user, employee=employee, partner=partner)
# Register the callback
post_save.connect(callback_create_profile, sender=User, dispatch_uid="core.models")
Run Code Online (Sandbox Code Playgroud)

运行时效果很好.我可以使用admin创建一个新用户,其他三个表也可以获得合理的条目.(除此之外,员工因为user.first_name和user.last_name在保存时未在管理员表单中填写.我仍然不明白为什么这样做)

当我运行我的测试套件时出现问题.在此之前,我创建了一堆灯具来在表格中创建这些条目.现在我收到一条错误,指出:

IntegrityError: duplicate key value violates unique constraint "core_userprofile_user_id_key"
Run Code Online (Sandbox Code Playgroud)

我想这是因为我已经在id为"1"的灯具中创建了公司,员工和个人资料记录,现在post_save信号正在尝试重新创建它.

我的问题是:我可以在运行灯具时禁用此post_save信号吗?我可以检测到我作为测试套件的一部分运行而不是创建这些记录吗?我现在应该从灯具中删除这些记录吗(虽然信号只设置默认值而不是我想要测试的值)?为什么夹具加载代码不会覆盖创建的记录?

人们如何做到这一点?

python django signals django-signals fixtures

47
推荐指数
3
解决办法
8251
查看次数

Django模型继承:创建现有实例的子实例(向下转换)?

我正在尝试整合第三方Django应用程序,该应用程序做出了不幸的继承决定django.contrib.auth.models.User,这对于可插拔应用程序来说是一个很大的禁忌.引用Malcolm Tredinnick:

更重要的是,就像在Python中一样,你不能使用Django的模型继承来"低估".也就是说,如果您已经创建了User实例,那么您不能在没有深思熟虑的情况下,使该实例对应于您尚未创建的子类实例.

好吧,我正处于需要将此第三方应用程序与现有用户实例集成的情况.所以,如果假设我确实愿意在封面下捅,我有什么选择?我知道这不起作用:

extended_user = ExtendedUser(user_ptr_id=auth_user.pk)
extended_user.save()
Run Code Online (Sandbox Code Playgroud)

也没有例外,但是它打破了各种各样的东西,首先django.contrib.auth.models.User用空字符串覆盖所有列...

python django inheritance

47
推荐指数
3
解决办法
9035
查看次数

在DRF中使用HyperlinkedModelSerializer有什么好处?

在参考这个链接时,我已经看到很多在Django Rest Framework中使用HyperlinkedModelSerializer的例子.它说:

HyperlinkedModelSerializer类与ModelSerializer类类似,不同之处在于它使用超链接来表示关系,而不是主键.

我的问题是,使用它们与常规模型序列化器的用例/好处是什么?

python django django-rest-framework

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

预填充内联FormSet?

我正在为一支乐队的出勤报名表工作.我的想法是让表格的一部分输入表演或排练的事件信息.这是事件表的模型:

class Event(models.Model):
    event_id = models.AutoField(primary_key=True)
    date = models.DateField()
    event_type = models.ForeignKey(EventType)
    description = models.TextField()
Run Code Online (Sandbox Code Playgroud)

然后我想要一个内联FormSet,将乐队成员链接到事件并记录它们是否存在,缺席或原谅:

class Attendance(models.Model):
    attendance_id = models.AutoField(primary_key=True)
    event_id = models.ForeignKey(Event)
    member_id = models.ForeignKey(Member)
    attendance_type = models.ForeignKey(AttendanceType)
    comment = models.TextField(blank=True)
Run Code Online (Sandbox Code Playgroud)

现在,我想做的是预先填充此内联FormSet,其中包含所有当前成员的条目,并默认它们存在(大约60个成员).不幸的是,Django 在这种情况下不允许初始值.

有什么建议?

python django django-forms

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