Как загрузить изображения для конкретного пользователя в самосозданной таблице пользователей в Django?
Я получаю MultiValueDictKeyError с этим кодом: Я создал 2 модели одну для пользователей и одну для фотографий. Когда пользователь входит в систему, он должен загрузить фотографию в upload.html. Отношения между моделями user и photos - один ко многим. Я не могу загрузить изображение из-за значения внешнего ключа, которое должно быть получено из loggin.html в gallery.html, а затем в upload.html.
Мои модели:
from django.db import models
import os
from django.contrib.auth.models import User
class users(models.Model):
username = models.CharField(max_length=20)
email = models.EmailField()
password = models.CharField(max_length=105)
def __str__(self):
return [self.username, self.email, self.password]
def filepath(request, filename):
return os.path.join('uploads/', filename)
class photos(models.Model):
user = models.ForeignKey(users, on_delete=models.CASCADE)
title = models.CharField(max_length=20)
description = models.CharField(max_length=100, null=True)
location = models.CharField(max_length=50, null=True)
image = models.ImageField(upload_to="media/")
def __str__(self):
return [self.user_id, self.title, self.description, self.location, self.image]
Мои ссылки:
from django.urls import path
from . import views
urlpatterns = [
path("index/", views.index, name="index"),
path('', views.login, name="login"),
path('login/', views.login, name="login"),
path('test/', views.test, name="test"),
path('register/', views.register, name="register"),
path('gallery/', views.gallery, name="gallery"),
path('upload/<int:user_id>/', views.upload, name="upload"),
]
Мои взгляды:
Мои формы:
from django import forms
from .models import photos
class ImageForm(forms.ModelForm):
class Meta:
model=photos
fields=("title", "description", "location", "image")
Gallery.html
{% extends 'main/base.html' %}
{% block welcomeText %}
<h3 class="text-center">Welcome, {{ name }}!</h3>
{% endblock %}
{% block regBtn %}
{% endblock %}
{% block btnToRight %}
<a class="btn btn-light" href='/login/'>Log out</a>
{% endblock %}
{% block content %}
<form method="get" action="/upload/{{ user_id }}/">
{% csrf_token %}
<div>
<button class="w-100 btn mb-3 btn-lg btn-primary" type="submit">Upload</button>
</div>
{% for i in images %}
<img src="{{ i.main.url }}" alt="" height="40px" width="40px">
{% endfor %}
</form>
{% endblock %}
И мой upload.html (пожалуйста, обратите внимание на комментарии, где я пытался что-то сделать)
{% extends 'main/base.html' %}
{% block welcomeText %}
<h3 class="text-center">Upload an image {{ name }}</h3>
{% endblock %}
{% block regBtn %}
{% endblock %}
{% block btnToRight %}
{# <a class="btn btn-light" href='/gallery/'>Cancel</a>#}
{% endblock %}
{% block content %}
<div class="container pt-md-5 pb-md-5 ">
<div class="row text-center h-100 align-items-center justify-content-center ">
<div class="col col-10 col-lg-4 rounded-3 bg-grad text-dark p-1 p-md-4 shadow-lg">
<form class="row gy-3" method="post" action="" enctype="multipart/form-data">
{% csrf_token %}
{# {% block error_banner %}#}
{# {% endblock %}#}
{{ form.as_p }}
{# <div class="col-12 form-floating">#}
{# <input name="IMAGE" type="file" required class="form-control">#}
{# <label for="floatingInput" class="form-label">Image</label>#}
{# </div>#}
{# <div class="col-12 form-floating">#}
{# <input name="TITLE" type="text" required class="form-control" id="floatingInput" placeholder="Title" value="{{ title }}">#}
{# <label for="floatingInput">Title</label>#}
{# </div>#}
{# <div class="col-12 form-floating">#}
{# <input name="DESCRIPTION" type="text" required class="form-control" id="floatingInput" placeholder="Description" value="{{ description }}">#}
{# <label for="floatingInput">Description</label>#}
{# </div>#}
{# <div class="col-12 form-floating">#}
{# <input name="LOCATION" type="text" required class="form-control" id="floatingInput" placeholder="Location" value="{{ location }}">#}
{# <label for="floatingInput">Location</label>#}
{# </div>#}
<button class="w-100 btn mb-3 btn-lg btn-primary" type="submit">Upload</button>
</form>
</div>
</div>
</div>
{% endblock %}