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

Вернуться на верх