Возможно ли в django связать несколько моделей с одним филом?

Допустим, у меня есть такие модели:

class Material(models.Model):
    name = models.CharField([...])

class Consumable(models.Model):
    name = models.CharField([...])
    restores = models.IntegerField([...])

class Weapon(models.Model):
    name = models.CharField([...])
    damage = models.IntegerField([...])

# And then I have an 'inventory', like this one:

class Inventory(models.Model):
    user = models.ForeignKey([...]) # to which user you want to link the item
    item = models.ForeignKey([...]]) # which item
    quantity = models.IntegerField([...]) # how many of it

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

# instead of this
item = models.ForeignKey(Consumable) # which item

# want something like this
item = models.ForeignKey(Consumable and Material and Weapon) # which item
# this wouldn't work ofc...

Есть ли способ собрать все 3 объекта и передать их в поле 'item' без необходимости перезапуска сервера? (при создании списка "choices", который запрашивается из модели, необходимо перезапустить сервер, чтобы увидеть новые добавленные объекты, а я этого не хочу)

.

Я также хочу придерживаться встроенной админки Django, поскольку она обеспечивала все, что мне нужно в течение последних нескольких месяцев, но я открыт для любых идей.

Я могу ошибаться, но мне кажется, что вы делаете это сложнее, чем нужно. Вместо того, чтобы делать отдельные классы для материалов (тип материала) и расходных материалов (тип продукта), вы можете встроить это в последний класс как поле модели в виде категории или bolean-поля.

class Products(models.Model):
    material_type = 
    consumable = boolean for yes no or you can do multiple choice field

Затем для элементов вы можете запросить количество элементов на основе полей material_type или consumable model (подробнее см. фильтры запросов).

all_items = Products.model.all()
consumable_items = Products.model.filter(your filter logic goes here)

Надеюсь, это поможет!

Вернуться на верх