Есть ли способ отобразить информацию из подключенной таблицы, если не ноль? - PullRequest
0 голосов
/ 17 октября 2019

Я создал таблицу с бэкэндом MySQL в Django, которая позволяет мне хранить генераторные диаграммы, которые были бы полезны в построении мира и построении персонажей, как вы можете найти на reddit.com/r/d100. Моя таблица может содержать 110 потенциальных записей роллов, но я ожидаю, что для некоторых таблиц (таких как таблицы d20) большое количество записей не будет использовано. Есть ли способ отобразить все используемые записи, но пропустить пустые записи? Если нет, я готов жестко зачеркнуть каждый из рулонов для отображения на веб-странице.

Я ожидал подключить что-то вроде

    <tr>
        <th>Roll</th>
        <th>Result</th>
    </tr>
    {% if table.roll_1 is not None %}
    <tr>
        <td>1</td>
        <td>{{ table.roll_1 }}
    </tr>
    {% endif %}
</table>

Это моя модель таблицы генератора:

class D100Generator(models.Model):
    d_100_id = models.AutoField(primary_key=True)
    field_of_interest = models.ForeignKey(FieldOfInterest, on_delete=models.CASCADE)
    subreddit_post_id = models.ForeignKey(Subreddit, on_delete=models.CASCADE, blank=True, null=True)
    module_id = models.ForeignKey(Module, on_delete=models.CASCADE, blank=True, null=True)
    generic_website_id = models.ForeignKey(GenericWebsite, on_delete=models.CASCADE, blank=True, null=True)
    table_name = models.CharField('table name', max_length=100)
    system = models.CharField(max_length=150)
    genre = models.CharField(max_length=250)
    chart_type = models.CharField('Die used', max_length=15)
    chart_instructions = models.TextField('Chart instructions & explanation')
    roll_1 = models.TextField('1', blank=True, null=True)
    roll_2 = models.TextField('2', blank=True, null=True)
    ...
    roll_109 = models.TextField('109', blank=True, null=True)
    roll_110 = models.TextField('110', blank=True, null=True)
    table_slug = models.SlugField(unique=True)

    def save(self, *args, **kwargs):
        if not self.id:
            #Newly created object, so set slug
            self.table_slug = slugify(self.table_name)

        super(D100Generator, self).save(*args, **kwargs)
    def __str__(self):
        return self.table_name

Это представление, которое вызывает страницу:

from django.shortcuts import get_object_or_404, render

from .models import D100Generator

def index(request):
    latest_table_list = D100Generator.objects.order_by('-d_100_id')[:5]
    context = {
        'latest_table_list': latest_table_list
    }
    return render(request, 'generators/index.html', context)

def table(request, table_slug):
    table = get_object_or_404(D100Generator, pk=table_slug)
    return render(request, 'generators/table.html', {'table': table})

Ответы [ 2 ]

0 голосов
/ 22 октября 2019

Существуют способы отфильтровать пустые записи для столбца, если используются несколько строк в таблице, но в этом случае мне нужно жестко закодировать каждое последующее имя столбца, и нет способа пропустить это.

0 голосов
/ 19 октября 2019

Я думаю, что вы можете сделать следующее, чтобы отфильтровать данные таблицы, чтобы исключить пустой или пустой список, содержащий записи

from django.db.models import Q

def index(request):
    latest_table_list = D100Generator.objects.filter(
        roll_1__isnull=False
    ).exclude(
        roll_1__exact=''
    ).order_by('-d_100_id')[:5]
    context = {
        'latest_table_list': latest_table_list
    }
    return render(request, 'generators/index.html', context)

Это исключит строки таблицы, в которых roll_1 равно None или пусто. Тогда вам может не потребоваться проверка None в шаблоне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...