Как хранить список внешних ключей в модели

Привет всем, вот случай, в котором я столкнулся с той же проблемой, пожалуйста, взгляните на это:

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 вы получите весь список классификаций

Если вы хотите узнать больше, вы можете проверить эту ссылку

Вернуться на верх