Django, при попытке связать предметы с инвентарем как inline возникает ошибка миграции
Цель: Я хочу сделать возможным наличие инлайнов в инвентаре, чтобы вы могли искать одного конкретного пользователя в модели инвентаря и изменять его предметы.
В "Items" я хочу иметь возможность создавать предметы. У них есть название и цена. Просто.
В "Inventory" я хочу иметь возможность создавать инвентаризации, выбирать пользователя (который ими владеет) и давать им несколько предметов, используя инлайны. Для предметов я хочу, чтобы они были независимыми: так, если я создам "Предмет 1", я хочу иметь возможность дать "Предмет 1" любому инвентарю, и я хочу, чтобы они (предметы) были перечислены в инвентаре, а не в самих предметах.
Например: Инвентарь
| user | items |
|---|---|
| user1 | item1,item2,item3 |
| user2 | item2,item6,item78 |
вместо:
Item
| belongs_to | item |
|---|---|
| user1 | item1 |
| user1 | item2 |
| user1 | item3 |
| user2 | item2 |
| user2 | item6 |
| user2 | item78 |
Код ошибки:
<class 'core.admin.ItemInline'>: (admin.E202) 'core.Item' has no ForeignKey to 'core.Inventory'.
Мой код:
models.py
class Item(models.Model):
name = models.CharField(max_length=32, blank=False, unique=True)
price = models.IntegerField(validators=[MinValueValidator(0)], default=0, help_text="0 means Free")
class Inventory(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, blank=False, verbose_name="Belongs to")
item = models.ForeignKey(Item, on_delete=models.CASCADE, blank=False, verbose_name="Item")
admin.py
class ItemInline(admin.StackedInline):
model = Item
extra = 0
class InventoryAdmin(admin.ModelAdmin):
list_display = ['user']
raw_id_fields = ['user']
inlines = [ItemInline]
admin.site.register(Inventory, InventoryAdmin)
Я уже просмотрел эти темы/вопросы, но (похоже) ни один не решил мою проблему.
Inline в Django admin: не имеет ForeignKey
Django Designing Model : Item/Inventory/User
Как добавить несколько входов из одного поля в модели django
Django - Отправка формы с несколькими вводами для одного поля
Я нашел решение своего вопроса, и я нашел его, пытаясь ответить на чужой вопрос. Мое решение можно найти вот здесь: