我有一个与另一个对象有多对多关系的对象.
在Django Admin中,这会在多个选择框中生成一个很长的列表.
我想过滤ManyToMany关系,因此我只获取客户选择的City中可用的类别.
这可能吗?我是否必须为它创建一个小部件?如果是这样 - 我如何将行为从标准的ManyToMany字段复制到它,因为我也想要filter_horizontal函数.
这些是我的简化模型:
class City(models.Model):
name = models.CharField(max_length=200)
class Category(models.Model):
name = models.CharField(max_length=200)
available_in = models.ManyToManyField(City)
class Customer(models.Model):
name = models.CharField(max_length=200)
city = models.ForeignKey(City)
categories = models.ManyToManyField(Category)
Run Code Online (Sandbox Code Playgroud)
我一直无视长期测试我的项目的必要性.
所以我花了一天多的时间寻找方法来为我当前的应用程序实现测试,并试图让一些TDD用于新的应用程序.
我找到了许多"教程",其中包含以下步骤:"1.安装此2.安装3.安装此4.完成!"
但似乎没有人谈论如何构建测试,包括文件和代码.
并且没有人讨论如何设置CI服务器,或者只是将测试与项目的部署集成在一起.
很多人都提到了面料,艺术品和鼻子 - 但没有人描述他们如何与他们一起工作.
我一直在寻找的是有关如何使用测试和CI等设置正确的Rails环境的详细信息......
有没有人觉得Django社区缺乏这个领域,还是仅仅是我?:)
哦,还有其他人有任何关于如何做的建议吗?
我试图将"信息"对象连接到许多"客户"(参见下面的代码)
当一个Information对象更新时,我想向连接到Information的每个Customer发送电子邮件.
但是,当我记录信号收到的sold_to字段时,我总是得到保存之前的数据.
我猜这是因为它的ManyToManyField和数据存储在一个单独的表中,但是在更新所有关系之后不应该调用post_save信号吗?
有人建议解决方案吗?
class Customer
name = models.CharField(max_length=200)
category = models.ManyToManyField('Category',symmetrical=False)
contact = models.EmailField()
class Information
name = models.CharField(max_length=200)
email = models.EmailField(max_length=200)
mod_date = models.DateTimeField(auto_now=True)
sold_to = models.ManyToManyField(Customer, null=True, blank=True)
def send_admin_email(sender, instance, signal, *args, **kwargs):
from myapp import settings
for cust in instance.sold_to.all():
settings.debug(cust.name)
post_save.connect(send_admin_email, sender=Information)
Run Code Online (Sandbox Code Playgroud)
编辑:#django中的apollo13提醒我:"相关项目(被保存为多对多关系的东西)不会像你发现的那样保存为模型的保存方法的一部分." - http://groups.google.com/group/django-users/msg/2b734c153537f970
但自2006年7月9日起,我真的希望有一个解决方案.
首先,我对Django支持的网站的性能没有任何不满,它没有获得大量流量,到目前为止每天访问量超过1000次.
我很好奇它能够应对繁忙的交通高峰,所以我用ab工具做了一些基准测试.
我注意到并发大于1时的性能提供了与1个并发连接相同的大量请求.
reqs/s不应该随着并发性而增加吗?
我在一台具有1 GB RAM,apache2(prefork),mod_wsgi,memcached和mysql的虚拟机上.
页面上的所有内容都已缓存,数据库不会受到任何点击.如果memcached将丢弃该条目,则只有2个轻(索引)查询 - 并且应立即重新缓存.
基准测试数据:(注意:我用2000和10k请求对其进行基准测试,结果相同)
首页,由django通过apache2/mod_wsgi提供:
-n100 -c4:http://dpaste.com/97999/ (58.2
reqs/s)-n100 -c1:http://dpaste.com/97998/ (57.7请求数/秒)
对于robots.txt,直接来自apache2:
-n100 -c4:http://dpaste.com/97992/ (4917
reqs/s)-n100 -c1:http://dpaste.com/97991/ (1412 reqs/s )
这是我的apache conf:http://dpaste.com/97995/
编辑:添加了更多信息
wsgi.conf:http://dpaste.com/98461/
mysite.conf:http://dpaste.com/98462/
我的wsgi-handler:
import os, sys
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
Run Code Online (Sandbox Code Playgroud) 好吧,我很难解释这一点,请告诉我是否应该向您介绍更多细节.
我的网址如下所示:http://domain.com/<category >/
Each <category>可能有一个或多个子类别.
我希望类别页面具有包含类别子类别的选择框(以及其他字段)的表单.我目前在其中一个模板中对表单进行了硬编码,但我想让它直接反映模型.
在我目前的硬编码解决方案中,我在我的类别视图中:
s = Category.objects.filter(parents__exact=c.id)
Run Code Online (Sandbox Code Playgroud)
表单模板迭代并打印出选择框(请参阅下面的模型代码)
我猜我想要一个带有init的ModelFormSet 来过滤掉类别,但我似乎无法在文档中找到如何做到这一点.
一直在看如何在Django ModelForm中过滤ForeignKey选项?同样,但我不能让它正常工作.
# The model that the Form should implement
class Incoming(models.Model):
cat_id = models.ForeignKey(Category)
zipcode = models.PositiveIntegerField()
name = models.CharField(max_length=200)
email = models.EmailField()
telephone = models.CharField(max_length=18)
submit_date = models.DateTimeField(auto_now_add=True)
approved = models.BooleanField(default=False)
# The categories, each category can have none or many parent categories
class Category(models.Model):
name = models.CharField(max_length=200, db_index=True)
slug = models.SlugField()
parents = models.ManyToManyField('self',symmetrical=False, …Run Code Online (Sandbox Code Playgroud) django ×5
django-forms ×2
apache2 ×1
bdd ×1
concurrency ×1
django-admin ×1
many-to-many ×1
mod-wsgi ×1
performance ×1
python ×1
tdd ×1
testing ×1