Как хранить список внешних ключей в модели
Привет всем, вот случай, в котором я столкнулся с той же проблемой, пожалуйста, взгляните на это:
ClassificationGroup.py
class DeviceClassificationGroup:
vendor_id = models.ForeignKey(Vendor, on_delete=models.CASCADE, default=None, null=True)
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=100)
description = models.CharField(max_length=1000)
classification = ??
Classification.py
class DeviceClassification(models.Model):
vendor_id = models.ForeignKey(Vendor, on_delete=models.CASCADE, default=None, null=True)
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=100)
description = models.CharField(max_length=1000)
device_type = models.IntegerField()
device_name_regex = models.CharField(max_length=100)
vid_pid = models.CharField(max_length=50)
device_instance_id = models.CharField(max_length=100)
serial_number = models.CharField(max_length=100)
brand = models.CharField(max_length=25)
def __str__(self):
return self.name
Таким образом, у меня будет множество классификаций, которые я могу поместить в одну классификационную группу.
Как хранить неизвестное количество внешних ключей в модели django?
Прошу помочь мне в этом.
Добавив поле ForeignKey
к модели DeviceClassification
:
class DeviceClassification(models.Model):
group = models.ForeignKey(DeviceClassificationGroup, on_delete=models.CASCADE, related_name='classifications')
Помните, что добавление внешнего ключа в модель создает отношение "один-ко-многим", то есть один DeviceClassification
принадлежит одному DeviceClassificationGroup
, а DeviceClassificationGroup
может иметь много DeviceClassification
объектов, связанных с ним.
Если теперь вы хотите получить доступ к вашим DeviceClassification
объектам из DeviceClassificationGroup
экземпляра:
group.classifications.all()
Обратите внимание, что аксессор является тем же, что указан related_name
в модели.
Если вы не укажете related_name
, оно будет автоматически выбрано как <model_name>_set
. Если вам не нужно связанное имя, вы можете использовать +
.
Документы: Связанное имя
Я думаю, что вы ищете построенные отношения между DeviceClassification
и DeviceClassificationGroup
, где одна группа может иметь несколько классификаций
Так что просто используйте следующим образом
class DeviceClassification(models.Model):
group = models.ForeignKey(DeviceClassificationGroup, on_delete=models.CASCADE)
После применения этого, если вы запустите DeviceClassificationGroup.classification
вы получите весь список классификаций
Если вы хотите узнать больше, вы можете проверить эту ссылку