Django-tables2: заполнение таблицы данными из разных таблиц базы данных (с помощью model.inheritance)
Я хочу отобразить данные из разных таблиц базы данных на таблице django-tables2.
У меня есть несколько приложений, в каждом из которых есть несколько таблиц базы данных (каждая таблица в отдельном файле). Структура проекта:
    --project
     -all
     -overview
all/models/compound.py
    class Compound (models.Model):
        name = models.CharField(max_length = 100, unique = True, verbose_name="Probe")
        dateAdded = models.DateField();
        class Meta:
            app_label = 'all'
all/models/probe.py
    class Probe(Compound):
       mechanismOfAction = models.CharField(max_length = 255, verbose_name="Mode of action")
       
      def get_absolute_url(self):
           return reverse('overview:probe_detail', args=[str(self.id)]) 
      def __str__(self):
           return f'{self.name}, {self.mechanismOfAction}'
      class Meta:
         app_label = 'all'
all/models/negativeControl.py
    class NegativeControl(Compound):
         probeId = models.ForeignKey(Probe, on_delete=models.CASCADE, related_name="controls", verbose_name="Control")
         class Meta:
              app_label = 'all'
overview/models/usageData.py
    class UsageData (models.Model):
         cellularUsageConc = models.CharField (max_length = 50, null = True, verbose_name="Recommended concentration")
    
          probeId = models.ForeignKey(Probe, on_delete=models.CASCADE, related_name="usageData")
          def __str__(self):
               return f'{self.cellularUsageConc}, {self.inVivoUsage}, {self.recommendation}'
          class Meta:
              app_label = 'overview'
all/tables.py
    class AllProbesTable(tables.Table):
          Probe = tables.Column(accessor="probe.name", linkify=True)  
          control = tables.Column(accessor="probe.controls")     
          mechanismOfAction = tables.Column()
          cellularUsageConc = tables.Column(accessor="usageData.cellularUsageConc")
          class Meta:
               template_name = "django_tables2/bootstrap5-responsive.html"
all/views.py
    class AllProbesView(SingleTableView):
          table_class = AllProbesTable
          queryset = queryset = Probe.objects.all().prefetch_related('usageData', 'controls')  
          template_name = "all/probe_list.html"
all/templates/all/probe_list.html
    {% load render_table from django_tables2 %}
    {% render_table table %}
В отрисованной таблице все заголовки верны и есть данные для "Зонда" и "Способа действия". Для "Контроля" я получаю "all.NegativeControl.None", а для "Рекомендуемой концентрации" - "-". Почему я получаю "-" для "Рекомендуемой концентрации".
Для датчика может быть более одного элемента управления. Мне нужно создать строку из имен всех элементов управления, например control1, control2, чтобы отобразить ее в таблице. Как я могу это сделать?
Этот пост был полезен, но в моем случае он не сработал.
Я использую Django 5.0.1 и Python 3.12.1.
Вы очень близки. В классе Table вы просто используете related_name для доступа, а затем настраиваете рендеринг для отображения:
class AllProbesTable(tables.Table):
      control = tables.Column(accessor="controls") 
      cellularUsageConc = tables.Column(accessor="usagedata")
      # [...]
    def render_control(self, record):
        return [c.name for c in record.controls.all()]
    def render_cellularUsageConc(self, record):
        return [ud.cellularUsageConc for ud in record.usagedata.all()]