请原谅,代码太多了,但我不确定是否可以用其他方式解释我的问题
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。事实上,我已经在本案中否决了它,以提供上面未列出的财产。我已经知道如何通过简单地扩展覆盖来回答这个问题,所以简单地说“您可以覆盖保存”是没有帮助的。
我想知道是否有更好的方法来实现这一点,是否有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)
)