我无法覆盖ModelForm保存方法.这是我收到的错误:
Exception Type: TypeError
Exception Value: save() got an unexpected keyword argument 'commit'
Run Code Online (Sandbox Code Playgroud)
我的目的是让表单为3个字段提交许多值,然后为这些字段的每个组合创建一个对象,并保存每个对象.在正确的方向上有用的推动将是王牌.
models.pyclass 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.pyfrom 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) 我想举办它使用Debian的5同一服务器下的几个场所,说我有site1,site2和site3,并承担我的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) 我有一个标准的多对一关系设置.有很多字段,但就我们的目的而言,相关模型是:
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的成员?我可以在线创建一个表单,但那就是创建新的学生.我已经创建了所有学生,我只是在寻找一种快速方法,将多个现有学生添加到不同的班级.
我有一组看起来像这样的模型:
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技巧失败了.有谁知道允许这种三级模型编辑的方法?提前致谢.
我有一个类似于以下的模型:
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)
并在视图中解析结果,但这对我来说似乎不对.
我试图在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) 在我的应用程序中,我想在新用户注册时在某些表中创建条目.例如,我想创建一个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信号吗?我可以检测到我作为测试套件的一部分运行而不是创建这些记录吗?我现在应该从灯具中删除这些记录吗(虽然信号只设置默认值而不是我想要测试的值)?为什么夹具加载代码不会覆盖创建的记录?
人们如何做到这一点?
我正在尝试整合第三方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用空字符串覆盖所有列...
在参考这个链接时,我已经看到很多在Django Rest Framework中使用HyperlinkedModelSerializer的例子.它说:
HyperlinkedModelSerializer类与ModelSerializer类类似,不同之处在于它使用超链接来表示关系,而不是主键.
我的问题是,使用它们与常规模型序列化器的用例/好处是什么?
我正在为一支乐队的出勤报名表工作.我的想法是让表格的一部分输入表演或排练的事件信息.这是事件表的模型:
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 在这种情况下不允许初始值.
有什么建议?
django ×10
python ×10
django-admin ×4
django-forms ×2
apache2 ×1
django-1.1 ×1
fixtures ×1
hosting ×1
inheritance ×1
inlines ×1
mod-wsgi ×1
signals ×1