Я пытаюсь использовать многие ко многим отношений в качестве внешнего ключа для другой таблицы, но я не уверен, если это possible.Consider следующая модель:Django с использованием ManytoMany в качестве внешнего ключа
from django.db import models
class Attribute(models.Model):
name=models.CharField(max_length=30)
unit=models.CharField(max_length=30)
class Protocol(models.Model):
name=models.CharField(max_length=30)
attributes=models.ManyToManyField(Attribute,db_table='protocol_attribute')
class Device(models.Model):
serial_number = models.CharField(max_length=30)
id_protocol=models.ForeignKey(Protocol)
class DeviceValues(models.Model):
id_device=models.ForeignKey(Device)
id_protocol_attribute=models.ForeignKey(Protocol.attributes)
value=models.IntegerField()
Когда я пытаюсь проверить эту модель я получаю следующую ошибку:
First parameter to ForeignKey must be either a model, a model name, or the string 'self'
Я знаю, что я не использую модель или название модели в качестве первого параметра, но как я ссылку в качестве внешнего ключа соединить таблицу, которую Django автоматически создаст, обрабатывая сопоставление между протоколом и атрибутами?
Возможным обходным решением может быть добавление протокола в качестве внешнего ключа к классу атрибута, а затем использование атрибута в качестве ключа для ключа к классу DeviceValue. Однако я не хочу этого делать, потому что у меня будут протоколы, которые будут делиться атрибутами. Я предпочел бы сделать таблицу соединений скорее для того, чтобы повторять атрибуты для каждого протокола.
Любые идеи будут более чем приветствуются .... спасибо !!!
Алехандро
Выполняет ли 'Protocol.attributes.through' работу? –
Он делает !!! Первоначально я понял, что вы не можете добавить больше внешних ключей в промежуточную таблицу, чем те, которые связаны с отношением m2m. Однако я попробовал и не жаловался. Следует учесть, что он не генерирует ограничение UNIQUE для 3 внешних ключей в файле sql, поэтому мне просто пришлось вручную добавить его. – user3851205