Возможно ли в 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)
Надеюсь, это поможет!