Моя проблема в том, что я не знаю, как выразить свой дизайн в терминах реляционных БД.
У меня есть класс «Feat», который должен содержать несколько других классов, а именно списки «Stat», «Skill's» и «Attribute's». Точное число из них зависит от экземпляра «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)
С этими моделями я мог создавать новые «Атрибуты» при создании нового «Подвига» в интерфейсе администратора. Тем не менее, я всегда видел бы все существующих «Атрибутов», а не только те, которые относятся к моему новому «Подвигу». Есть ли способ ограничить вид только теми, которые созданы вместе с новым «Подвигом»? Что-то вроде обратной ссылки на «Подвиг», который создал «Атрибут»?
По сути, когда я создаю или редактирую «Подвиг», я должен иметь возможность только использовать «Атрибут, созданный на странице этого экземпляра, или добавить новый экземпляр« Атрибут ». Я не хочу, чтобы «принадлежность атрибута к другому« подвигу »(или другому не связанному классу) обнаруживалась.
Обратите внимание, что я не хочу добавлять поле в класс 'Attribute', поскольку оно также должно использоваться вместе с другими классами (например, 'Character')
Я также хотел бы сделать это в интерфейсе администратора, поскольку это экономит мне немного времени.
В связанной заметке: есть ли способ оставить поле «многие ко многим» пустым? Или мне просто создать магическое «пустое» значение и установить его по умолчанию?