Как хранить список внешних ключей в модели
Привет всем, вот случай, в котором я столкнулся с той же проблемой, пожалуйста, взгляните на это:
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
вы получите весь список классификаций
Если вы хотите узнать больше, вы можете проверить эту ссылку