Хотите добиться функции поиска на странице администратора django для нескольких таблиц

В настоящее время я работаю над страницей администратора django 2.0.2. У меня есть три таблицы: "метаболиты", "ген" и "реакции". Структура каждого класса определяется следующим образом:

class Genes(models.Model):
    id = models.CharField(primary_key=True, max_length=255)
    name = models.CharField(max_length=255, blank=True, null=True)
    notes = models.CharField(max_length=255, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'Genes'


class Metabolites(models.Model):
    id = models.CharField(primary_key=True, max_length=255)
    name = models.CharField(max_length=255, blank=True, null=True)
    compartment = models.CharField(max_length=255, blank=True, null=True)
    charge = models.CharField(max_length=255, blank=True, null=True)
    formula = models.CharField(max_length=255, blank=True, null=True)
    notes = models.CharField(max_length=255, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'Metabolites'


class Reactions(models.Model):
    id = models.CharField(max_length=255, primary_key=True)
    name = models.CharField(max_length=255, blank=True, null=True)
    metabolites = models.TextField(blank=True, null=True)
    lower_bound = models.CharField(max_length=255, blank=True, null=True)
    upper_bound = models.CharField(max_length=255, blank=True, null=True)
    gene_reaction_rule = models.TextField(blank=True, null=True)
    subsystem = models.CharField(max_length=255, blank=True, null=True)
    notes = models.CharField(max_length=255, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'Reactions'

Как видите, в класс "реакция" также включен компонент "метаболиты". Обычно в реакции участвуют более двух метаболитов. Я хочу создать поле поиска на странице администратора (а не на странице каждого класса), и когда я набираю идентификатор реакции, результат поиска может отображать реакцию и все вовлеченные метаболиты, а когда я печатаю в метаболитах результат поиска может отображать информацию об этом метаболите и все реакции, в которых участвует этот метаболит.

Это возможно? Может кто-нибудь сказать мне, как это сделать?

Спасибо за помощь мне!

1 ответ

РЕДАКТИРОВАТЬ:

Это описывает "старую школу" способ достижения этого. Похоже, что это пример использования многих полей Django. Я не столкнулся с этой потребностью в моем проекте; так что я еще не изучил многие возможности в django. Я рекомендую прочитать документацию по django, чтобы узнать, как использовать много-много полей.

Описанный здесь способ будет выполнять желаемые соединения в данных. Тем не менее, я подозреваю, что администратор django будет проще и проще в настройке, используя поле "многие ко многим".

конец редактирования

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

class ReactionMetabolites(models.Model):
    reaction = models.ForeignKey(Reactions, on_delete=models.CASCADE)
    metabolite = models.ForeignKey(Metabolites, on_delete=models.CASCADE)

Поле "многие ко многим" также может быть уместным здесь; Я еще не разобрался во многих областях.

Изменить 2:

После внесения этих изменений в ваши модели вам нужно будет выполнить и применить миграции, чтобы применить изменения к вашей базе данных.

python manage.py makemigrations
python manage.py migrate
Другие вопросы по тегам