【发布时间】:2009-10-21 15:21:24
【问题描述】:
请原谅过多的代码,但我不确定是否可以用其他方式解释我的问题
我有一个正在处理的 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)
问题来了:
有没有办法在不覆盖模型的保存功能的情况下,使条目只允许具有相同项目 ID 的类?
**************************************************** ************开始编辑************************************ ************************
需要明确的是,我并不反对压倒保存。在这种情况下,我实际上已经覆盖了它以提供上面未列出的属性。我已经知道如何通过简单地扩展该覆盖来回答这个问题,所以简单地说“你可以覆盖保存”是没有帮助的。
我想知道是否没有更好的方法来实现这一点,是否有 Django 本地实现,以及密钥类型是否已经存在。
**************************************************** ************结束编辑************************************ ***********************
在 Postgresql 中也有办法做到这一点吗?
(为了更好的衡量,这里是在 Postgresql 中创建表的代码) 这创建了以下表格:
CREATE TABLE blog_asclass
(
id serial NOT NULL,
"name" character varying(100) NOT NULL,
project_id integer NOT NULL,
CONSTRAINT blog_asclass_pkey PRIMARY KEY (id),
CONSTRAINT blog_asclass_project_id_fkey FOREIGN KEY (project_id)
REFERENCES blog_project (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION DEFERRABLE INITIALLY DEFERRED
)
CREATE TABLE blog_entry
(
id serial NOT NULL,
project_id integer NOT NULL,
build_date timestamp with time zone NOT NULL,
CONSTRAINT blog_entry_pkey PRIMARY KEY (id),
CONSTRAINT blog_entry_project_id_fkey FOREIGN KEY (project_id)
REFERENCES blog_project (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION DEFERRABLE INITIALLY DEFERRED
)
CREATE TABLE blog_entry_asclasses
(
id serial NOT NULL,
entry_id integer NOT NULL,
asclass_id integer NOT NULL,
CONSTRAINT blog_entry_asclasses_pkey PRIMARY KEY (id),
CONSTRAINT blog_entry_asclasses_asclass_id_fkey FOREIGN KEY (asclass_id)
REFERENCES blog_asclass (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION DEFERRABLE INITIALLY DEFERRED,
CONSTRAINT blog_entry_asclasses_entry_id_fkey FOREIGN KEY (entry_id)
REFERENCES blog_entry (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION DEFERRABLE INITIALLY DEFERRED,
CONSTRAINT blog_entry_asclasses_entry_id_key UNIQUE (entry_id, asclass_id)
)
CREATE TABLE blog_project
(
id serial NOT NULL,
"name" character varying(100) NOT NULL,
dir character varying(300) NOT NULL,
CONSTRAINT blog_project_pkey PRIMARY KEY (id),
CONSTRAINT blog_project_dir_key UNIQUE (dir),
CONSTRAINT blog_project_name_key UNIQUE (name)
)
【问题讨论】: