Атрибут 'image' не имеет связанного с ним файла в django
productscreate.html
<form method="post">
{% csrf_token %}
<table border="1">
<tr>
<td>Title:
<input type="text" name="title" id="title" data-bind="value: title"></td>
<br>
</tr>
<tr>
<td>Description:
<textarea name="description" id="description">Description</textarea></td>
<br>
</tr>
<tr>
<td>Image:
<input type="file" name="image" id="image"></td>
<br>
</tr>
<tr>
<td><button type="submit" id="submit" data-bind="submit: mySubmit">Submit</button></td>
</tr>
</table>
</form>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.5.0/knockout-min.js"></script>
<script>
var formData1 = new FormData();
$(document).on('click', '#submit',function(e){
e.preventDefault()
var viewModel = {
title:ko.observable(),description:ko.observable(),
mySubmit : function(formElement) {
var formData = {
'title' : viewModel.title() ,
'description' : viewModel.description(),
};
formData1.append('image', $('#image')[0].files[0])
$.ajax({
type: "POST",
url: '{% url "productscreate" %}',
data: formData,formData1,
cache: false,
processData: false,
enctype: 'multipart/form-data',
contentType: false,
success: function (){
window.location = '{% url "productslist" %}';
},
error: function(xhr, errmsg, err) {
console.log(xhr.status + ":" + xhr.responseText)
}
});
}
};
ko.applyBindings(viewModel);
</script>
views.py
class ProductsList(ListView):
model = products
context_object_name = 'products'
template_name = "productslist.html"
class ProductsCreate(CreateView):
model = products
fields = ['title','description','image']
template_name = "productscreate.html"
success_url=reverse_lazy('productslist')
class ProductsDetailView(DetailView):
template_name = "productsdetail.html"
queryset = products.objects.all()
context_object_name = 'products'
model = products
models.py
class products(models.Model):
title = models.CharField(max_length=200)
description = models.CharField(max_length=200)
image = models.FileField(blank=True,null=True)
def __str__(self):
return self.title
productsdetail.html
<form>
Title:- {{products.title }} <br><br>
Description:- {{ products.description}}<br><br>
Image :- <img src="{{products.image.url}}" alt="image"><br><br>
<img src="/static/images/book.jpg">
<button><a href="/edit/{{ products.id}}">Edit</a></button>
</form>
Изображение не отображается на странице подробного описания продуктов Оно показывает Атрибут 'image' не имеет файла, связанного с ним на странице подробного описания. Когда я создаю продукт, изображение не отображается. Я также предоставил код ajax. Пожалуйста, помогите мне решить эту проблему Заранее спасибо
Это означает, что для данного товара нет изображения, поэтому ImageField
- это NULL
. Таким образом, вы должны проверить, есть ли изображение с помощью:
{% if products.image %}
Image :- <img src="{{products.image.url}}" alt="image"><br><br>
{% endif %}
Насколько я понял, вы не можете загрузить изображение с фронтенда, потому что у вас есть enctype="multipart/form-data"
в вашей форме
<form method="post" enctype="multipart/form-data" action ="">
{% csrf_token %}
<table border="1">
<tr>
<td>Title:
<input type="text" name="title" id="title" data-bind="value: title"></td>
<br>
</tr>
<tr>
<td>Description:
<textarea name="description" id="description">Description</textarea></td>
<br>
</tr>
<tr>
<td>Image:
<input type="file" name="image" id="image"></td>
<br>
</tr>
<tr>
<td><button type="submit" id="submit" data-bind="submit: mySubmit">Submit</button></td>
</tr>
</table>
</form>
я полагаю, что вы настроили статические и медиа файлы идеально, это должно работать