如何使用djando-table2与基于类的视图来显示多个表的数据?

问题描述 投票:2回答:1
models.py

class DailyRecordManager(models.Manager):
def get_query_set(self):
    qs = super(DailyRecordManager, self).get_query_set().order_by('date_organised')
    return qs

class DailyRecord(models.Model):
    date_organised = models.DateField('Ogransied Date', help_text=('Enter Date when the program is organised: CCYY-MM-DD'))
    program_name = models.TextField('program name',)
    venue = models.CharField('venue', max_length = 255, blank=True)
    organiser = models.ForeignKey(Organiser, verbose_name = 'Organiser', related_name = 'organisers')

    objects = models.Manager()
    public = DailyRecordManager()


    class Meta:
        verbose_name = 'dailyrecord'
        verbose_name_plural = 'dailyrecords'
        ordering = ['-date_organised']

    def __str__(self):
         return self.program_name

class Participant(models.Model):
    participant = models.CharField(max_length= 50, unique = True)
    daily_record = models.ForeignKey(DailyRecord, verbose_name = 'program_name')

    class Meta:
        verbose_name = 'participant'
        verbose_name_plural = 'participants'

    def __str__(self):
        return self.participant

视图.py

class DailyActivityPageView(SingleTableView):
    table_class = DailyRecordTable
    queryset = DailyRecord.public.all() 
  # queryset = Participant(DailyRecord.public.all()) is not working
    template_name = 'dailyrecord/daily-activity-record.html'

表.py

class DailyRecordTable(tables.Table):
    date_organised = tables.Column('Date')
    program_name = tables.Column( 'Program Name')
    venue = tables.Column( 'Venue')
    organiser = tables.Column( 'Organiser')
    participant = tables.Column( 'dailyrecord.participant')

# daily = tables.RelatedLinkColumn()

    class Meta:
        model = DailyRecord

现在我需要的是也显示参与者表中的数据,对应的是daily_record外键。

点击这个链接查看快照,看到表的最后一列。我需要这里的Participant.partcipant列的数据。

对不起,英语不好。

謝謝你

django python-3.x django-tables2
1个回答
0
投票

这里有两个问题。

首先,一个每日记录可以有多个参与者。因此,为了填入最后一列,你必须将所有可能的参与者汇总到该列中(例如作为列表)。

第二个问题是,你应该让 Participant 溯及既往 DailyRecord 的属性 "related_name "添加到 daily_record 在你 Participant 模型,像这样。

daily_record = models.ForeignKey(DailyRecord, verbose_name = 'program_name', related_name="participants")

现在,你应该简单地从daily_record中获取参与者,就像这样。

participants = DailyRecord.public.first().participants.all()

如果你有 OneToOneField 而不是 ForeignKey 你可以像这样把(单个)参与者添加到表中。

participant = tables.Column( "Participant", accessor='participant')
© www.soinside.com 2019 - 2024. All rights reserved.