Как загрузить картинку платежа по заказам, объект '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
...)