请原谅代码量过多,但我不确定是否可以用其他方式解释我的问题
我有一个Django项目,我正在进行以下工作:
class Project(models.Model):
name = models.CharField(max_length=100, unique=True)
dir = models.CharField(max_length=300, blank=True, unique=True )
def __unicode__(self):
return self.name;
class ASClass(models.Model):
name = models.CharField(max_length=100)
project = models.ForeignKey(Project, default=1)
def __unicode__(self):
return self.name;
class Entry(models.Model):
project = models.ForeignKey(Project, default=1)
asclasses = models.ManyToManyField(ASClass)
问题是:
有没有办法在不重写模型的save函数的情况下,使条目只允许具有相同项目ID的类?在
**********************************************************开始编辑***********************************************************
明确地说,我不反对覆盖save。事实上,在这个案例中,我已经超越了它,提供了一个上面没有列出的财产。我已经知道如何通过简单地扩展覆盖来回答这个问题,所以简单地说“您可以覆盖save”是没有帮助的。在
我想知道是否有更好的方法来实现这一点,是否存在Django本机实现,以及密钥类型是否已经存在。在
*************************************************************结束编辑****************************************************
用postsql也可以吗?在
(下面是在Postgresql中创建表的代码) 这将创建以下表格:
^{pr2}$
您可以使用
pre_save
信号,并在它们不匹配时引发错误。。。其效果类似于重写save(在save之前调用它)问题是创建/删除/更新多对多关系不会触发save(或导致})
pre_save
或{更新
尝试使用^{} argument on your many-to-many relation
这使您可以手动定义m2m关系的中间表,这将允许您访问信号和函数。在
然后你可以随意选择信号或过载
我确信您可以在PostgreSQL级别使用trigger来完成这项工作,您可以将其添加到Django initial-SQL file中,以便在syncdb中自动创建它。在
在Django模型级别,为了得到一个有用的答案,您必须澄清为什么您反对重写save()方法,因为这是当前提供这种验证的正确(也许是唯一的)方法。在
django1.2将(希望)包含一个full model validation framework。在
相关问题 更多 >
编程相关推荐