2010-12-14 89 views
0

我的问题是,我真的不知道如何把我的设计在关系数据库方面。Django管理员:限制多对多的关系项目,以新创建的

我有一个类“专长”,它应该包含其他几个类,即'统计','技能'和'属性'列表。这些数字的确切数量取决于'专业'的实例,所以我不能只定义一个静态数量的字段。

在普通的Python,我会简单地使用列表:

class Feat(): 
    name 
    desc 
    att_effects = [] 
    skill_effects = [] 
    stat_effects = [] 

我尝试使用许多对许多关系在Django复制本,但并没有完全制定。

class Attribute_Name(models.Model): 
    name = models.CharField(max_length=100) 
    desc = models.TextField() 
    def __unicode__(self): 
     return str(self.name) 

... 

class Attribute(models.Model): 
    name = models.ForeignKey(Attribute_Name) 
    value = models.IntegerField() 
    def __unicode__(self): 
     return "%s: %s" % (self.name, self.value) 

... 

class Feat(models.Model): 
    name = models.CharField(max_length=100) 
    desc = models.TextField() 
    att_effects = models.ManyToManyField(Attribute) 
    skill_effects = models.ManyToManyField(Skill) 
    stat_effects = models.ManyToManyField(Stat) 

通过这些模型,我可以在管理界面中创建新的'专长'时创建新的'属性'。不过,我总是会看到全部现有的'属性',而不仅仅是那些与我的新'专长'有关的属性。有没有办法将观点限制为只有那些与新的'壮举'一起创造的观点?类似于创建“属性”的“专长”的后链接?

基本上,当我创建或编辑'壮举'时,我应该只能使用从此实例的页面创建的'属性'或添加一个新的'属性'实例。我不希望'属性属于另一个'壮举'(或另一个不相关的类)显示出来。

注意,我不想一个字段添加到“属性”类,因为它也应该与其他类(如“字符”)一起使用

我也想做到这一点在管理界面中,因为它为我节省了不少工作。

在相关说明:有没有办法让多对多字段为空?或者我应该创建一个神奇的'空'值并将其设置为默认值?

回答

1

“有没有一种方法可以将视图限制为仅与新创建的”专长“一起创建的视图?就像创建”属性“的”专长“的反向链接?

是:使用ModelAdmin的查询集功能as described in this question