Структура модели Джанго - PullRequest
       10

Структура модели Джанго

1 голос
/ 27 ноября 2011

Я создаю простую игровую базу данных и у меня возникли некоторые проблемы.

Есть 2 модели: Материал и Здание .

class Material(Model):
    type = CharField(max_length=30)

class Building(Model):
    cost = M2M(?)
    input = M2M(?)
    output = M2M(?)

В модели материала содержатся названия материалов (дерево, камень, железо, доска, рыба, еда и т. Д.). У здания должно быть немного больше полей, однако я сталкиваюсь с трудностями только с этими. Представьте себе что-то вроде игры «Поселенцы». Для строительства требуется 3 куска камня (стоимость), а для изготовления 1 доски (выход) требуется 2 куска дерева (входные данные).

Как я могу создать такую ​​структуру, где я мог бы указать количество материала и легко изменить его при необходимости.

Я уже пытался использовать сквозной аргумент, однако он не позволил мне иметь 3 или более вхождений в модели.

1 Ответ

1 голос
/ 27 ноября 2011

возможно, ваша таблица - может иметь поле quantity?

edit:

ах, понятно.Это ограничение связано с тем, как работают таблицы.Сквозная таблица содержит только ссылки на две модели, которые она объединяет, но не может знать, какие поля в указанных моделях определяют отношение m2m.Таким образом, каждая сквозная таблица может использоваться только для одного отношения.Однако с некоторыми абстрактными подклассами мы можем сохранить код достаточно чистым:

class BuildingMaterialBase(models.Model):
    material = models.ForeignKey('Material')
    building = models.ForeignKey('Building')
    quantity = models.IntegerField()

    class Meta:
        abstract = True

class BuildingMaterialIn(BuildingMaterialBase):
    pass

class BuildingMaterialOut(BuildingMaterialBase):
    pass


class Building(models.Model):
    in_ = models.ManyToManyField(Material, through=BuildingMaterialIn)
    out_ = models.ManyToManyField(Material, through=BuildingMaterialOut)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...