Взаимное расположение таблиц и связь manytomany - Python

Узнай цену своей работы

Формулировка задачи:

Итак есть необходимость в админке реализовать возможность добавление многие ко многим. База у меня уже была готовая (Постгре) Модели:
Листинг программы
  1. class DimSensor(models.Model):
  2. sensid = models.CharField(primary_key=True, max_length=64)
  3. sensor_type_sid = models.ForeignKey(DirSensorType, db_column = 'sensor_type_sid')
  4. link_id = models.ManyToManyField(LinkRoomBedLink, through='LinkSensorRoomLink', through_fields=('sensid','room_bed_link_sid'), blank=True, null=True)
  5. def __unicode__(self):
  6. return self.sensid
  7. class Meta:
  8. managed = False
  9. db_table = 'dim_sensor'
  10. verbose_name_plural = "Список датчиков"
  11. class LinkRoomBedLink(models.Model):
  12. room_bed_link_sid = models.IntegerField(primary_key=True)
  13. lpu_id = models.ForeignKey(DirLpu, db_column = 'lpu_id', blank=True, null=True)
  14. dep_sid = models.ForeignKey(DirDep, db_column = 'dep_sid', blank=True, null=True)
  15. sensors_id = models.ManyToManyField(DimSensor, through='LinkSensorRoomLink', through_fields=('room_bed_link_sid', 'sensid'), blank=True, null=True)
  16. room_num = models.CharField(max_length=64, blank=True, null=True)
  17. bed_num = models.CharField(max_length=64, blank=True, null=True)
  18. sysdate = models.DateTimeField(blank=True, null=True)
  19. def __unicode__(self):
  20. return self.bed_num
  21. class Meta:
  22. managed = False
  23. db_table = 'link_room_bed_link'
  24. verbose_name_plural = "Палаты и койки"
  25. class LinkSensorRoomLink(models.Model):
  26. sensor_room_link_sid = models.IntegerField(primary_key=True)
  27. room_bed_link_sid = models.ForeignKey(LinkRoomBedLink, db_column = 'room_bed_link_sid')
  28. sensid = models.ForeignKey(DimSensor, db_column = 'sensid')
  29. sysdate = models.DateTimeField(blank=True, null=True)
  30. class Meta:
  31. managed = False
  32. db_table = 'link_sensor_room_link'
  33. verbose_name_plural = "Связи датчиков"
Из-за взаимосвязей с другими таблицами и друг другом никак не удается их расположить так, что бы все работало - все время django не видит какое-то модели.... Может я что-то не так делаю, добавил лишних полей? sensors_id и link_id - мои поля, которые я добавил в модели что бы реализовать many-to-many...

Решение задачи: «Взаимное расположение таблиц и связь manytomany»

textual
Листинг программы
  1. class DimSensor(models.Model):
  2.     sensid = models.CharField(primary_key=True, max_length=64)
  3.     sensor_type_sid = models.ForeignKey('DirSensorType', db_column = 'sensor_type_sid')
  4.     link_id = models.ManyToManyField('LinkRoomBedLink', through='LinkSensorRoomLink', through_fields=('sensid','room_bed_link_sid'), blank=True, null=True)
  5.     def __unicode__(self):
  6.         return self.sensid
  7.     class Meta:
  8.         managed = False
  9.         db_table = 'dim_sensor'
  10.         verbose_name_plural = "Список датчиков"  
  11.  
  12. class LinkRoomBedLink(models.Model):
  13.     room_bed_link_sid = models.IntegerField(primary_key=True)
  14.     lpu_id = models.ForeignKey('DirLpu', db_column = 'lpu_id', blank=True, null=True)
  15.     dep_sid = models.ForeignKey('DirDep', db_column = 'dep_sid', blank=True, null=True)
  16.     sensors_id = models.ManyToManyField('DimSensor', through='LinkSensorRoomLink', through_fields=('room_bed_link_sid', 'sensid'), blank=True, null=True)
  17.     room_num = models.CharField(max_length=64, blank=True, null=True)
  18.     bed_num = models.CharField(max_length=64, blank=True, null=True)
  19.     sysdate = models.DateTimeField(blank=True, null=True)
  20.     def __unicode__(self):
  21.         return self.bed_num
  22.     class Meta:
  23.         managed = False
  24.         db_table = 'link_room_bed_link'
  25.         verbose_name_plural = "Палаты и койки"
  26.  
  27. class LinkSensorRoomLink(models.Model):
  28.     sensor_room_link_sid = models.IntegerField(primary_key=True)
  29.     room_bed_link_sid = models.ForeignKey('LinkRoomBedLink', db_column = 'room_bed_link_sid')
  30.     sensid = models.ForeignKey('DimSensor', db_column = 'sensid')
  31.     sysdate = models.DateTimeField(blank=True, null=True)
  32.     class Meta:
  33.         managed = False
  34.         db_table = 'link_sensor_room_link'
  35.         verbose_name_plural = "Связи датчиков"

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.25 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут