Требуется несколько записей для «Элемент», Django Администратор - PullRequest
0 голосов
/ 05 марта 2020

Я хочу ввести несколько записей для "item" в одном "session_title" - и я думаю, что понимаю, что мне нужно отношение ManyToOne (установлено с ForeignKey), но mysite / admin не показывает несколько доступных записей? Я использую DjangoAdmin для администрирования своего приложения.

Редактировать / Добавить: я знаю, что есть шаг, который мне не хватает. Я надеюсь, что кто-то отправит меня туда.

class Item(models.Model):
    item_name = models.TextField(unique=True)

    class Meta:
        managed = True
        db_table = 'item'

    def __str__(self):
        return self.item_name

class SessionLog(models.Model):
    date = models.DateField()
    session_title = models.TextField(blank=True, null=True)
    campaign = models.OneToOneField(Campaign, models.DO_NOTHING, default="1")
    chapter = models.OneToOneField(Chapter, models.DO_NOTHING, default="1")
    scene = models.OneToOneField(Scene, models.DO_NOTHING, default="1")
    character = models.OneToOneField(Character, models.DO_NOTHING, default="1")
    location = models.OneToOneField(Location, models.DO_NOTHING, blank=True, null=True)
    npc = models.OneToOneField(Npc, models.DO_NOTHING, blank=True, null=True)
    monster = models.OneToOneField(Monster, models.DO_NOTHING, blank=True, null=True)
    item = models.ForeignKey(Item, models.DO_NOTHING, blank=True, null=True)
    loot_pp = models.IntegerField(blank=True, null=True)
    loot_gp = models.IntegerField(blank=True, null=True)
    loot_ep = models.IntegerField(blank=True, null=True)
    loot_sp = models.IntegerField(blank=True, null=True)
    loot_cp = models.IntegerField(blank=True, null=True)
    session_xp = models.IntegerField(blank=True, null=True)
    session_strongstart = models.TextField(blank=True, null=True)
    session_secrets = models.TextField(blank=True, null=True)
    session_clues = models.TextField(blank=True, null=True)
    session_notes = models.TextField(blank=True, null=True)

    class Meta:
        managed = True
        db_table = 'session_log'

    def __str__(self):
        return self.session_title

Может ли кто-нибудь указать мне правильное направление? Заранее спасибо.

1 Ответ

0 голосов
/ 05 марта 2020

Да, вы на правильном пути.

Измените

item = models.ForeignKey(Item, models.DO_NOTHING, blank=True, null=True)

на

items = models.ManyToManyField(Item, on_delete=models.DO_NOTHING)

и в вашем администраторе объявите Inline класс :

class ItemInline(admin.TabularInline):
    pass

class SessionLogAdmin(admin.ModelAdmin):
    inlines = [ItemInline]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...