Извините, если это нубский вопрос. Я новичок в этом, и хотя я считаю, что это простая проблема, я не могу найти правильные условия для поиска в 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?