Как загрузить картинку платежа по заказам, объект 'QuerySet' не имеет атрибута '_meta'
Я не могу фильтровать для загрузки изображений. Я хочу загружать изображения по :
orders= Order.objects.filter(id=orid, id_profil=id_profil)
получить ошибку :
У объекта 'QuerySet' нет атрибута '_meta'
view.py
def Detail(request, orid=None):
data = cartData(request)
cartItems = data['cartItems']
id_profil = request.user.profile
orders = Order.objects.filter(id=orid, id_profil=id_profil)
OrderItems = OrderItem.objects.filter(order=orid)
pengirimans = Pengiriman.objects.filter(order=orid)
if request.method == "POST":
form = Uplaodpic(request.POST ,request.FILES ,instance=orders)
if form.is_valid():
form.save()
else:
form=Uplaodpic(instance=orders)
context = {'orders':orders, 'OrderItems':OrderItems, 'pengirimans':pengirimans, 'cartItems':cartItems, 'form':form}
return render(request, 'store/detail.html' ,context)
forms.py
from django.forms import ModelForm
from .models import Order, Profile
class Uplaodpic(ModelForm):
class Meta:
model=Order
fields=["id","bukti"]
detial.html
<td colspan="2">
<img src="{{ order.buktiURL }}" alt="image" class="img-thumbnail" style="max-height:100px">
</td>
<td colspan="2">
<form action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
{{form.as_p}}
<input type="Submit" id="submit" name="submit">
</form>
</td>
</tr>
modes.py
class Order(models.Model):
id_profil = models.ForeignKey(Profile, on_delete=models.SET_NULL, blank=True, null=True)
order_data = models.DateTimeField(auto_now_add=True)
selesai = models.BooleanField(default=False, blank=True, null=True)
status = models.BooleanField(default=False, blank=True, null=True)
id_transaksi = models.CharField(max_length=200, null=True)
bukti = models.ImageField(upload_to='bukti/',default="person-circle.svg",null=True, blank=True)
ongkir = models.CharField(max_length=200, null=True)
total = models.CharField(max_length=200, null=True)
total_harga = models.CharField(max_length=200, null=True)
pembayaran = models.CharField(max_length=200, null=True)
instance параметром здесь должен быть единичный объект, а не QuerySet. Судя по имени id, вы должны использовать get вместо filter для получения одного объекта или потерпеть неудачу. Итак, ваш код может выглядеть следующим образом (после очень простого форматирования, чтобы стать читабельным):
from django.http import HttpResponseNotFound
def Detail(request, orid=None):
data = cartData(request)
cartItems = data['cartItems']
id_profil = request.user.profile
OrderItems = OrderItem.objects.filter(order=orid)
pengirimans = Pengiriman.objects.filter(order=orid)
try:
# Note the singular
order = Order.objects.get(id=orid, id_profil=id_profil)
except Order.DoesNotExist: # Not owned bu user or does not exist
return HttpResponseNotFound()
if request.method == "POST":
form = Uplaodpic(request.POST, request.FILES, instance=order)
if form.is_valid():
form.save()
else:
form = Uplaodpic(instance=order)
context = {
'order': order, # Note the singular, you're using "order" in template anyway
'OrderItems': OrderItems,
'pengirimans': pengirimans,
'cartItems': cartItems,
'form': form
}
return render(request, 'store/detail.html', context)
(обратите внимание, что лучше было бы написать Upload, а не Uplaod...)