Как извлечь строку из базы данных, сопоставив поле формы - PullRequest
0 голосов
/ 20 января 2019

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

У меня есть 2 таблицы Arrival и Withdraw

В таблице Arrival есть prod_cd, prod_nm, ..., withdraw

В таблице Withdraw есть prod_cd, prod_nm, withdraw*, 1017 *

Я хочу, чтобы моя форма вводила только prod_cd, и тогда поля prod_nm и withdraw будут автоматически извлечены из таблицы Withdraw

Я пытаюсь создать другую страницу, поэтому сначала будет запрос для получения Withdraw.objects, а затем добавление записи, но при этом выдается ошибка

views.py

def add_cycle(request, model, cls, inquiry):
    if request.method == "POST":
        form = cls(request.POST)

    if form.is_valid():
        form.save()
        return redirect(inquiry)

    else:
    form = cls()
    return render(request, 'add_new.html', {'form': form})

def add_arrival(request):
    return add_cycle(request, Arrival, ArrivalForm, inquiry_arrival)

def inquiry_cycle(request, pk, model, cls):

    instance= Withdraw.objects.get(pk=pk)
    form = cls(instance=instance)
    if request.method == "POST":
        form = cls(request.POST,instance=instance)
        if form.is_valid():
            form.save(commit=True)
            return redirect ('index')
    else:
        form = ArrivalForm(instance=instance)
    return render_to_response('add_newInquiry.html', {'form': form})

def inquiry_arrival (request, pk):
    return inquiry_cycle(request, pk, Arrival, ArrivalForm)

urls.py

url(r'^add_arrival$', add_arrival, name='add_arrival'),
url(r'^inquiry_arrival$', inquiry_arrival, name='inquiry_arrival'),

forms.py

class ArrivalForm(forms.ModelForm):
    class Meta:
        model = Arrival
        fields = ('prod_cd', 'prod_nm', 'quantity', 'issues', 'location', 'withdraw', 'expired_date', 'sup_sheet')

add_new.html

<form method="POST">
    <br>
    {% csrf_token %}
    <h4>ADDING ITEMS</h4>

    <div class="form-group row">
        <label for="id_{{ form.prod_cd.name }}" class="col-2 col-form-label"> {{ form.prod_cd.label }} </label>
        <div class="col-10">
                {{ form.prod_cd }}

        </div>
    </div>

    <button type="submit" class="btn btn-primary" name="button"> Inquiry</button>

</form>

add_newInquiry.html

<form method="POST">
    <br>
    {% csrf_token %}
    <h4>ADDING ITEMS</h4>
    {% for field in form %}
    <div class="form-group row">
        <label for="id_{{ field.name }}" class="col-2 col-form-label"> {{ field.label }} </label>
        <div class="col-10">
                {{ field }}

        </div>
    </div>
    {% endfor %}

    <button type="submit" class="btn btn-primary" name="button"> Add Record</button>

</form>

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

ValueError at /add_arrival
The view inventory.views.add_arrival didn't return an HttpResponse object. It returned None instead.

1 Ответ

0 голосов
/ 20 января 2019

Давайте проследим ошибку вместе! Итак, The view inventory.views.add_arrival didn't return an HttpResponse object. It returned None instead. Это означает, что когда Django пытается получить представление add_arrival , шаблоны не возвращаются.

Давайте еще раз посмотрим на add_arrival view. Вызывает функцию add_cycle . Обратите внимание на последний параметр query_arrival , который является методом.

Теперь, в функции add_cycle , если форма верна, мы возвращаем redirect(inquiry), где query - это метод query_arrival . Однако, поскольку query является методом, его нужно вызывать, чтобы что-то было возвращено! Чтобы вызвать этот метод, вы должны были добавить скобки после запроса, например: redirect(inquiry()). Обратитесь к этой ссылке для получения дополнительной информации. Удачи!

...