Django - сопоставить аргумент с моделью - PullRequest
0 голосов
/ 04 апреля 2020

Извините, если это нубский вопрос. Я новичок в этом, и хотя я считаю, что это простая проблема, я не могу найти правильные условия для поиска в Google.

У меня есть несколько типов устройств. Поскольку они имеют заметно отличающиеся характеристики, я не могу объединить их в одну модель Поэтому у меня есть отдельные модели для каждого типа устройства. У меня также есть таблица (модель) типов устройств, то есть простая таблица, в которой перечислены все доступные типы. Каждое устройство memeber называется типом устройства, который является внешним ключом к этой таблице. Минимальный пример:

from django.db import models

class DeviceType(models.Model): 
    device_type = models.CharField(max_length=30)


class Foo(models.Model): 
    memeber_a = models.CharField(max_length=30)
    memeber_b = models.CharField(max_length=30)
    device_type = models.ForeignKey(DeviceType, on_delete=models.PROTECT)


class Bar(models.Model): 
    memeber_a = models.URLField()
    memeber_b = models.URLField()
    memeber_c = models.CharField(max_length=30)
    device_type = models.ForeignKey(DeviceType, on_delete=models.PROTECT)

Я также добавил простое представление, которое перечисляет все доступные типы, запрашивая модель DeviceType. Теперь я sh сообщу, что после нажатия на каждый тип (это ссылки) откроется страница со списком всех устройств этого типа.

Просто отправить правильный DeviceType.id в мнение у меня есть. Тем не менее, у меня есть новое представление, которое получает id в качестве аргумента и нуждается в запросе правильной модели.

Простым решением было бы иметь словарь, который сопоставляет идентификаторы с моделями, и использовать received_id, например:

mapping = {1:Foo, 2: Bar}
query_result = mapping[received_id].objects.all()

, а затем просто используйте метод __str__, который я реализовал для каждого из устройств. Тем не менее, мне нужно обновить список для каждого изменения в таблице БД для типов deice. Есть ли более элегантное решение?

Другим решением было бы создание новой модели, которая содержит все устройства независимо от типа и содержит только общие элементы. Таким образом, я мог запросить его для выполнения sh моей задачи. Тем не менее, это более сложно с точки зрения базы данных, так как мне нужно обновить обе таблицы для любых изменений. В жаргоне базы данных я мог бы просто создать view, который содержит это объединение всех устройств (независимо от типа) и разделяет только общие члены. Как бы я создал такие соперники в Django?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...