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