Как ввести несколько строк в базу данных django с одной отправкой в ​​django - PullRequest
0 голосов
/ 26 января 2020

У меня есть для l oop со скрытым вводом в каждом. Я пытаюсь ввести его в базу данных транзакций с помощью:

Models.py
class TransDetail(models.Model):
    name = models.CharField(max_length=200)
    price = models.DecimalField(max_digits=15,decimal_places=2)
    amount = models.IntegerField()
    sumprice = models.DecimalField(max_digits=15,decimal_places=2)
    no_note = models.CharField(max_length=200)


class Transaction(models.Model):
    no_nota = models.CharField(max_length=200)
    total_nota = models.DecimalField(max_digits=15,decimal_places=2)
    tanggal = models.CharField(max_length=200)


HTML Template
              <table>
                 <tbody>
                    <form method="POST" action="{% url 'transactionadd' %}">
                    {% csrf_token %}
                    {% for name,amount,price,sumprice in x %}
                    <tr>
                        <td>{{name}}
                            <input type="hidden" name="name" value="{{name}}">
                        </td>
                        <td>{{amount}}
                            <input type="hidden" name="amount" value={{amount}}>
                        </td>
                        <td>{{price}}
                            <input type="hidden" name="price" value={{price}}>
                        </td>
                        <td>{{sumprice}}
                            <input type="hidden" name="sumprice" value={{sumprice}}>
                            <input type="hidden" name="no_note" value={{no_nota}}>
                        </td>
                    </tr>
                    {% endfor %}
                </tbody>
            </table>
                <input type="hidden" name="no_nota" value={{no_nota}}>
                <input type="hidden" name="total_nota" value={{sumcart}}>
                <input type="hidden" name="tanggal" value={{now}}>
                <h3> Your cart total is {{sumcart}}</h3>
                <hr/>
                <button type="submit" class="btn-success">Confirm</button>
            </form>

Views.py
def transactionadd(request):
    form1 = TransForm(request.POST or None)
    form2 = TransDetailForm(request.POST or None)
    if form1.is_valid() and form2.is_valid():
        form1.save()
        form2.save()
        messages.success(request,"Transaction recorded")
        Cart.objects.all().delete()
        return redirect('index')

    context={
        'form1':form1,
        'form2':form2
    }

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

Проблема заключается в том, что каждый раз, когда я подтверждаю транзакцию, в базу данных вводится только одна строка ввода (последний объект). Допустим, я положил гамбургер и хот-дог в корзину и создал транзакцию. В базе данных транзакций я получу только хот-дог, но не гамбургер. Как я могу решить это?

1 Ответ

0 голосов
/ 26 января 2020

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

Если вы хотите добавить в форму несколько объектов одного типа, вам следует использовать набор форм: https://docs.djangoproject.com/en/3.0/topics/forms/formsets/

Здесь объясняется, как можно легко добавлять новые записи с помощью javascript: https://simpleit.rocks/python/django/dynamic-add-form-with-add-button-in-django-modelformset-template/

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