1

I'm having a problem in getting the pk in my template. When I select a record it always returns the last pk ID. Btw, I'am using functional base view. Here's my collection.html:

<form method="POST" action="{% url 'single_collection' %}">
{% csrf_token %}
<table class="table" id="dataTables-example">
<thead>
  <tr>
    <th>ID</th>
    <th>Name</th>
    <th>Status</th>
    <th>Download</th>
  </tr>
</thead>
<tbody>
  {% for collectionlist in collection %}
    <tr>
      <td>{{ collectionlist.id }}</td>
      <td>{{ collectionlist.sqa_name }}</td>
      <td>{{ collectionlist.status }}</td>
      <td class="center"><center><button type="button" class="btn btn-link" data-toggle="modal" data-target="#myModaldl{{ collectionlist.id }}" ><span class="glyphicon glyphicon-download-alt"></span></button></center></td>
      </tr>

      <div class="modal fade collectClass" id="myModaldl{{ collectionlist.id }}" role="dialog" tabindex="-1">
        <div class="modal-dialog" role="document">
          <div class="modal-content">
            <div class="modal-header">
              <button type="button" class="close" data-dismiss="modal">&times;</button>
              <h3 class="modal-title">Single Collect</h3>
            </div>
            <div class="modal-body form-horizontal">
              <div class="form-group">
                <label for="inputSQAID" class="col-sm-3 control-label">SQA Name</label>
                <div class="col-sm-8">
                  <input type="hidden" name="pk_id" id="pk_id" value="{{ collectionlist.id }}">
                  <input type="text" class="form-control" name="singlecollect" value="{{ collectionlist.sqa_name }}" id="inputSQAID">
                  </div>
                </div>
              </div>
              <div class="modal-footer">
                <button type="button" class="btn btn-warning" data-dismiss="modal">Cancel</button>
                <button type="submit" class="btn btn-success" name="single_dl">Download</button>
              </div>
            </div>
          </div>
        </div>
    {% endfor %}
</tbody>
</table>
</form>

Here's my views.py:

def collection(request):

    context = {
        'collection': DataCollection.objects.all(),
        'title': 'Data Collection',
    }

return render(request, 'data_collection/collection.html', context)

def single_collect(request):
    if request.method == 'POST':
        pkid = request.POST.get('pk_id')
        print(pkid)

        all_data = DataCollection.objects.all()
        return render(request, 'data_collection/collection.html', {'title' : 'Data Collection', 'data': all_data})

In my views.py, I just want first to print the pk ID of the item/record I selected in my table using the modal. But, it's always getting the last record in my database.

Selcuk
  • 57,004
  • 12
  • 102
  • 110
N.Omugs
  • 321
  • 4
  • 17
  • In your form you have multiple inputs with same name. Can't do that. FormData keys needs to be unique, since you have same name multiple times, value of last one discards others. – Vaibhav Vishal Aug 28 '19 at 06:42

1 Answers1

1

This is because you have a single <form> tag with all the DataCollection rows inside. You should have individual forms for each one, i.e.:

{% for collectionlist in collection %}
  <form method="POST" action="{% url 'single_collection' %}">
  {% csrf_token %}
    ...
  </form>
{% endfor %}
Selcuk
  • 57,004
  • 12
  • 102
  • 110