Как заполнить таблицу отфильтрованными данными в Django - PullRequest
1 голос
/ 02 июля 2019

Я пытаюсь заполнить таблицу фильтрованным набором данных из моей модели манифестов, используя параметр url.

Я считаю, что проблема у меня в строке Views.py

 manifests = Manifests.objects.all().filter(reference=reference_id)

Models.py

class Manifests(models.Model):

    reference = models.ForeignKey(Orders)
    cases = models.IntegerField()
    description = models.CharField(max_length=1000)
    count = models.IntegerField()

    def __str__(self):
        return self.description

Urls.py

url(r'^add_manifest/(?P<reference_id>\d+)/$', add_manifest, name='add_manifest'),

Views.py

def add_manifest(request, reference_id):

    if request.method == "POST":
        form = CreateManifestForm(request.POST)

        if form.is_valid():
            instance = form.save(commit=False)
            try:
                order = Orders.objects.get(id=reference_id)
            except Orders.DoesNotExist:
                pass  
            instance.reference = order
            instance.save()
            return redirect('add_manifest', reference_id=reference_id)

    form = CreateManifestForm()
    #manifests = Manifests.objects.all()
    manifests = Manifests.objects.all().filter(reference=reference_id)

    context = {
        'form': form,
        'reference_id': reference_id,
        'manifests' : manifests,
    }

    return render(request, 'add_manifest.html', context)

шаблон (add_manifest.html)

  {% extends 'base.html' %}

{% block body %}

  <div class="container">
    <form method="POST">

      <br>
      <br>
      <br>
      {% csrf_token %}

        <div class="column">
          <label for="form.reference">Reference ID: </label><br>
          <input type="text" value="{{ reference_id }}">
          <br>
        </div>
        <div class="description">
        <div class="column">
          <label for="form.description">Description: </label>
          <br>
          {{ form.description}}
        </div>
        </div>
        <div class="column">
          <label for="form.cases">Cases: </label>
          <br>
          {{ form.cases }}
          <br>
        </div>
        <div class="column">
          <label for="form.count">Count: </label>
          <br>
          {{ form.count }}
          <br>
          <br>
        </div>
          <br>
          <br>


      <button type="submit" name="add_mani" style="border-color: #7395AE;">Add Line</button>
    </form>


    <br>
    <h4>Manifest</h4>

    <div class="table-responsive">
    <table class="table table-striped table-bordered manifest_table" cellspacing="0" style="width="100%">

      <thead>
        <tr>
          <th></th>
          <th style="width:10%;">Ref ID</th>
          <th style="width:10%;">Cases</th>
          <th style="width:60%;">Description</th>
          <th style="width:10%;">Count</th>
        </tr>
      </thead>

      <tbody>

        {% for manifests in manifests %}

        <tr>
          <td>
            <a href="{% url 'edit_manifest_browse' manifests.pk %}" class="btn btn-default btn-sm" role="button">Edit</a>
          </td>
          <td>{{ manifests.reference }}</td>
          <td>{{ manifests.cases }}</td>
          <td>{{ manifests.description}}</td>
          <td>{{ manifests.count}}</td>
        </tr>

        {% endfor %}

      </tbody>
    </table>
    </div>
    <div class="text-center">
      <button type="submit" class="btn btn-primary" name="button" align="right">Subit Manifest</button>
    </div>

  </div>

Я хочу, чтобы таблица отображала только те строки, где ссылка в модели манифестов = reference_id в URL. В настоящее время он не работает как таковой, таблица просто пуста.

1 Ответ

0 голосов
/ 02 июля 2019

Измените имя переменной цикла for следующим образом:

{% for manifest in manifests %}
    <tr>
      <td>
        <a href="{% url 'edit_manifest_browse' manifests.pk %}" class="btn btn-default btn-sm" role="button">Edit</a>
      </td>
      <td>{{ manifest.reference }}</td>
      <td>{{ manifest.cases }}</td>
      <td>{{ manifest.description}}</td>
      <td>{{ manifest.count}}</td>
    </tr>

    {% endfor %}

Если для reference_id есть какой-либо объект Manifest, он будет отображаться в шаблоне.

Обновить

Возможно, ваша форма не проверяется.Так что это хорошая идея для визуализации ошибок формы:

# view
def add_manifest(request, reference_id):
    form = CreateManifestForm(request.POST or None)
    if request.method == "POST":
        if form.is_valid():
            instance = form.save(commit=False)
            try:
                order = Orders.objects.get(id=reference_id)
                instance.reference = order
            except Orders.DoesNotExist:
                pass  
            instance.save()
    manifests = Manifests.objects.all().filter(reference=reference_id)

    context = {
        'form': form,
        'reference_id': reference_id,
        'manifests' : manifests,
    }

    return render(request, 'add_manifest.html', context)

И обновить шаблон, чтобы отображать ошибки в шаблоне:

{% if form.errors %}
    {% for field in form %}
        {% for error in field.errors %}
            <div>
                <strong>{{ error|escape }}</strong>
            </div>
        {% endfor %}
    {% endfor %}
    {% for error in form.non_field_errors %}
        <div>
            <strong>{{ error|escape }}</strong>
        </div>
    {% endfor %}
{% endif %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...