我的问题是我真的不知道如何根据关系数据库来设计我的设计。
我有一个类'Feat',它应该包含其他几个类,即'Stat','Skill'和'Attribute'的列表。确切的数量取决于'Feat'的实例,所以我不能只定义静态的字段数。
在普通的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)
使用这些模型,我可以在管理界面中创建新的'Feat'时创建新的'属性'。但是,我总是会看到所有现有的'属性',而不仅仅是那些与我的新'Feat'有关的属性。有没有办法将视图限制为仅与新的'Feat'一起创建的视图?有点像'Feat'的反向链接,它创建了'Attribute'?
基本上,当我创建或编辑'Feat'时,我应该只能使用从该实例的页面创建的属性或添加新的'Attribute'实例。我不希望'属性'属于另一个'Feat'(或其他不相关的类)出现。
请注意,我不想在'Attribute'类中添加字段,因为它也应该与其他类一起使用(例如'Character')
我也想在管理界面中这样做,因为它为我节省了相当多的工作。
相关说明:有没有办法让多对多字段为空?或者我应该创建一个神奇的“空”值并将其设置为默认值?
答案 0 :(得分:1)
“有一种方法可以将视图限制为仅与新的'Feat'一起创建的视图?某些东西就像创建'属性'的'Feat'的反向链接?”
是:使用ModelAdmin as described in this question
的查询集功能