Как вручную заполнить поле формы после отправки, используя значение, переданное по URL в Django? - PullRequest
0 голосов
/ 10 июля 2019

У меня есть эта форма, где пользователь должен загрузить файл (квитанцию) и затем подключить этот файл с помощью внешнего ключа. Я создал простую форму, которая принимает файл, и он тоже работает нормально. Но я должен сохранить этот файл в базе данных вместе с внешним ключом для другой модели. Прямо сейчас моя модель имеет файл как отношение и внешний ключ. В моей форме есть только поле для загрузки файла, потому что я явно не хочу, чтобы пользователь выбирал, каким внешним ключом он должен быть. Я хочу, чтобы этот внешний ключ был заполнен автоматически значением, указанным в URL. Я вызываю функцию так:

href="{% url 'suppliers:model_form_upload' quiz.id %}"

, где я получаю quiz.id правильно.

Это моя модель:

class Uploaded_pod(models.Model):
    document = models.FileField(upload_to='pods/')
    lr_connected = models.ForeignKey(LR, on_delete=models.CASCADE, related_name='lr_pod')

Что я попробовал

Это моя функция views.py:

def pod_upload (request, pk):
    lr_object = get_object_or_404(LR, id=pk)

    if request.method == 'POST':
        form = UploadPODform(request.POST, request.FILES)
        form.lr_connected = lr_object
        form.save()

        if form.is_valid():
            form.lr_connected = lr_object
            form.save()
            return redirect('home')
    else:
        form = UploadPODform()
        form.lr_connected = lr_object


    return render(request, 'classroom/suppliers/model_form_upload.html', {'form': form})

Как видите, я пытаюсь заполнить часть form.lr_connected только что отфильтрованным объектом, используя значение pk, переданное в URL.

Это моя форма:

class UploadPODform(forms.ModelForm):
    class Meta:
        model = Uploaded_pod
        fields = ('document',)

Я также напечатал объект lr_object, и он работал нормально. Но когда я захожу на страницу, чтобы загрузить файл, он говорит мне, что

нулевое значение в столбце "lr_connected_id" нарушает ненулевое ограничение ДЕТАЛИ: В ошибочной строке содержится (10, pods / csv_BET4hl8.svg, null).

Который явно мой, мое поле lr_connected не было заполнено объектом, который я пытался пропустить.

Возможно ли это? Есть ли лучший способ ???

Я следовал этому руководству для загрузки файлов. Это то, что усложняет проблему?

Это мой html рендеринг:

{% block content %}
    <form method="post" enctype="multipart/form-data">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Upload</button>


    </form>

    <p><a href="{% url 'home' %}">Return to home</a></p>
{% endblock %}

Здесь вы можете видеть, что я добавил оператор print, и он показывает, что в моем терминале он нашел lr_object с 5 в качестве идентификатора.

proof

1 Ответ

2 голосов
/ 10 июля 2019

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

if request.method == 'POST':
    form = UploadPODform(request.POST, request.FILES)
    if form.is_valid():
        obj = form.save(commit=False)
        obj.lr_connected = lr_object
        obj.save()
...