首页 > 解决方案 > Django Query.get 引发对象匹配查询不存在 Try & except 错误

问题描述

模型.py

class Inventory(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE,blank=True)
    product = models.ManyToManyField(Product, blank=True)

class Product(models.Model):

    name = models.CharField(max_length=50)
    description = models.TextField(default='Hidden')
    image = models.ImageField(upload_to='images/', blank=True, null=True)
    interest = models.IntegerField(default=0, blank=True)
    price = models.IntegerField(default=0, blank=True)
    capital = models.IntegerField(default=1, blank=True)
    years = models.IntegerField(default=0, blank=True)
    created_date = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.name

视图.py

def inventory(request):
    b = request.user.id # user_id=12
    inv1 = Inventory.objects.all()
    
    try:
        userdb = inv1.get(user_id__exact=b)
        inv1.get(user_id__exact=b)
        context = {}
        return render(request, 'redcube/inventory.html', context)
    except:
        userdb = inv1.get(user_id__exact=b)
        products = userdb.product.all()
        bal = 0
        for p in products:
            print(p.price, '=p.price')
            bal = bal + p.price
        context = {'inv1': inv1, 'userdb': userdb, 'products': products, 'bal': bal}
        return render(request, 'redcube/inventory.html', context)


    context = {'inv1':inv1}
    return render(request, 'redcube/inventory.html', context)

库存.html

{% extends 'basic.html' %}
{% load static %}
{% block content %}

<link href="{% static 'bootstrap.min.css' %}" rel="stylesheet">

<style>
  .center {
  margin: auto;
  width: 50%;

  padding: 10px;
}
</style>

<div class = "w-100 p-auto" style = "width:500px; margin: 0 auto;">
<div class="center">
<div class="container">

    <div class="card" style="width: 50rem;">
        <div class="center">
            <div class = "text-center user-block">
            <h1 class="center">Inventory</h1>
                {% if products %}
                <h2>Balance <span class="text-info">{{bal}}</span> Tcoins </h2>
                {% else %}
                    <h2 class="text-danger">No items</h2>
                {% endif %}
            </div>
        </div>
    </div>
</div>
</div>
</div>


{% csrf_token %}
{% if user.is_authenticated %}

{% for p in products %}

<div class = "w-100 p-auto" style = "width:500px; margin: 0 auto;">
        <div class="center">
    <div class="container">
        <div class="card" style="width: 50rem;">
            <div class="center">
                <div class = "text-center user-block">
                    <h3 class = "text-info left-things">{{p.name}}</h3>
                    <p><h5> {{p.price}} Tcoin </h5> Description {{p.description}}</p>
                    <img class="w-10 p-auto" src = "{{p.image.url}}" alt = "User Image" style = "width :400px; height:auto; margin: 0 auto;">
                </div>
            </div>
        </div>
        </div>
            </div>
    </div>
    {% endfor %}


{% endif %}
<div class="container">

{% endblock %}

当 Inventory 对象没有关于 b(user_id=12) 的 db 时(用户尚未制作产品,因此 Inventory DB 没有 used_id=12)

inventory.html 页面向我显示“DoesNotExist 错误”

userdb = inv1.get(user_id__exact=b)

我是 django 的新手,我知道我可以在 html 页面上设置 if 选项来避免,但我想了解 views.py 侧选项以避免 DoesNotExits 错误解决方案。

我试图找到答案,但几个小时都找不到

我该如何解决这个问题?:{

标签: pythondjango

解决方案


推荐阅读