Исключение Значение: Поле 'id' ожидало число, но получило ''. (Django)
Я пытался написать страницу добавления фотографии на Django, но получил ошибку. Я смотрел это видео на youtube, чтобы написать свой собственный проект.
Я уже написал python manage.py makemigrations, а затем python manage.py migrate. К сожалению, это не сработало.
Вот файл "view.py":
def addPhoto(request):
categories = Category.objects.all()
if request.method == 'POST':
data = request.POST
image = request.FILES.get('image')
if data['category'] != 'none':
category = Category.objects.get(id = data['category'])
else:
category = None
photo = Photo.objects.create(
title=Title,
category=category,
description=data['description'],
image=image,
)
return redirect('index')
context = {'categories':categories}
return render(request, 'auctions/newlisting.html', context)
Вот файл "urls.py":
from django.urls import path
from . import views
urlpatterns = [
path("", views.index, name="index"),
path("login", views.login_view, name="login"),
path("logout", views.logout_view, name="logout"),
path("register", views.register, name="register"),
path("newlisting", views.addPhoto, name="create_listing"),
path('photo/<str:pk>/', views.viewPhoto, name='photo'),
]
Вот файл "models.py":
class Category(models.Model):
category = models.CharField(max_length = 30)
def __str__(self):
return f'{self.category}'
class Photo(models.Model):
class Meta:
verbose_name = 'Photo'
verbose_name_plural = 'Photos'
title = models.CharField(max_length = 60,)
category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True, blank=True)
image = models.ImageField(null=False, blank=False)
description = models.TextField()
def __str__(self):
return self.description
Вот файл "newlisting.html":
{% extends "auctions/layout.html" %}
{% block body %}
<div class="m-5">
<div class="container">
<div class="row justify-content-center">
<div class="col-md-6">
<h2>Create Listing</h2>
<a href="{% url 'index' %}" class="btn btn-dark my-3">Go Back</a>
<div class="card">
<form method='POST' action="" enctype="multipart/form-data">
{% csrf_token %}
<div class="form-group m-3">
<label>Title</label>
<input required name="Title" type="text" placeholder="Enter a title"
class="form-control">
</div>
<div class="form-group m-3">
<label>Description</label>
<input required name="description" type="text" placeholder="Enter a description"
class="form-control">
</div>
<div class="form-group m-3">
<label>Select a category</label>
<select name="category" class="form-control">
<option value='none'>Select a category...</option>
{% for Category in categories %}
<option value='{{category.id}}'>{{Category.category}}</option>
{% endfor %}
</select>
{{form.category}}
</div>
<div class="form-group m-3">
<label>Upload image</label>
<input required name="images" type="file" multiple class="form-control-file">
</div>
<button type='submit' class="btn btn-primary m-3">Submit</button>
</form>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
помогите пожалуйста!
Сначала в urls.py используйте / конец всех url
файлurls.py
from django.urls import path
from . import views
urlpatterns = [
path('login/', views.loginUser, name="login"),
path('logout/', views.logoutUser, name="logout"),
path('register/', views.registerUser, name="register"),
path('', views.gallery, name='gallery'),
path('photo/<str:pk>/', views.viewPhoto, name='photo'),
path('add/', views.addPhoto, name='add'),
]
а также этот код уже опубликован на GitHub так что просто сравните оба кода
Я также рекомендую не использовать id и использовать pk. Когда вы хотите получить query, потому что если вы измените имя pk на вашем models.py, вам не нужно менять его в файле представления
Либо просто используйте код на GitHub, либо измените его по своему усмотрению
.