You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django报错:auctions_user_user_permissions表缺失,后台及数据异常

Django项目问题排查

问题概述

修改代码后出现两个问题:

  1. 无法进入admin面板,报错no such table: auctions_user_user_permissions
  2. 网站首页无商品数据显示

相关代码

views.py

# item detail page in views.py
def item_detail(request, bidid):
    bid_desc = List.objects.get(pk = bidid, active_bool=True)
    nowbids = Bidmodel.objects.filter(listb_id = bidid)
    
    return render(request, "auctions/item_detail.html",{
        "list": bid_desc,
        "comments" : Comments.objects.filter(listc_id = bidid),
        "now_bid": minbid(bid_desc.first_bid, nowbids),
})



# winner
def winner(request):
    bid_id = request.GET["listid"]
    nowbids = Bidmodel.objects.filter(listb_id = bid_id)
    biddesc = List.objects.get(pk = bid_id)
    maxbid = minbid(biddesc.first_bid, nowbids)

    try:
        winner_who = Bidmodel.objects.get(bid = maxbid, listb_id = bid_id)
        winner_list = List.objects.get(id = bid_id)
        win = Winner(win_list = winner_list, user = winner_who.user)
        winners_name = winner_who.user
    
    except:
        winner_list = List.objects.get(first_bid = maxbid, id = bid_id)
        win = Winner(win_list = winner_list, user = winner_list.user)
        winners_name = winner_list.user

    biddesc.active_bool = False
    biddesc.save()
    win.save()
    messages.success(request, f"{winners_name} won {win.win_list.title}.")
    return redirect("index")



# check winner
def winner_check(request):
    try:
        yourwin = Winner.objects.filter(user = request.user.username)
    except:
        yourwin = None

    return render(request, "auctions/winner_check.html",{
        "user_winlist" : yourwin,
    })

index.html

{% extends "auctions/layout.html" %}

{% block body %}
    <h2>Active Listings</h2>

    {% if messages %}
        {% for message in messages %}
            <div>{{ message }}</div>
        {% endfor %}
    {% endif %}

    <div>
        {% for item in items %}
            <div>
                <img src= {{ item.image.url }} alt = "{{item.title}}"><br>
                <a>{{ item.title }}</a><br>
                <a>{{ item.category }}</a><br>
                <a><a>Frist Bid: </a> {{ item.first_bid }} $ </a><br>
                <a href="{% url 'item_detail' item.id %}">View Product</a>
            </div>  
        {% endfor %}
    </div>

{% endblock %}

item_detail.html

{% extends "auctions/layout.html" %}

{% block body %}
    {% if messages %}
        {% for message in messages %}
            <div>{{ message }}</div>
        {% endfor %}
    {% endif %}
    <img src= {{ list.image.url }} alt = "{{list.title}}"><br>
    <a><a>Product:</a>{{ list.title }}</a><br>
    <a><a>Category: </a>{{ list.category }}</a><br>
    <a><a>Desc: </a>{{ list.description }}</a><br>
    <a><a>Status: </a>{{ list.status }}</a><br>
    <a><a>Frist Bid: </a> {{ list.first_bid }} $ </a><br>
    <div><a><a>Current Bid: </a> {{ now_bid }} $ </div>
    <div><a><a>Listed By: </a> {{ list.user }}</div>
    


    <div>
        <form method= "get" action = "{% url "addwatchlist" %}">
            <button type = "submit" value = {{ list.id }} name = "listid" >Add to Watchlist</button>
        </form>
    </div>



    
    <form method = "get" action = "{% url "bid_check" %}">
        <input name = "bid_amnt" placeholder = "Bid Amount" type = "number">
        <button type = "submit" name = "list_d" value = {{ list.id }}>accept</button>
    </form>



    <h3>Comments</h3>
        <div>
            <ul>
                {% for comment in comments %}
                    <li><a><a>{{ comment.user }} : {{comment.comment}}</a></li>
                {% endfor %}
            </ul>
        </div>

        <form method = "get" action ="{% url "comments" %}">
            <input required type = "text" placeholder = "Add Comment" name = "comment">
            <button type = "submit" value = {{ list.id }} name = "listid"> Comment </button>
        </form>



        <div>
            {% if list.user == user.username %}
                <form method= "get" action = "{% url "winner" %}">
                    <button type = "submit" value = {{ list.id }} name = "listid" >Close Bid</button>
                </form>
            {% endif %}
        </div>
   
        
{% endblock %}

winner_check.html

{% extends "auctions/layout.html" %}

{% block body %}
    <h2>Your Winnings</h2>
    <div>
        {% for list in user_winlist %}
            <div>
                <img src={{ list.win_list.image.url }}><br>
                <a>Product:{{list.win_list.title}}</a><br>
                <a>Category:{{list.win_list.category}}</a><br>
                <a>Initial price:{{list.win_list.first_bid}}</a><br>
                <div>This bid was listed by <a>{{ list.win_list.user }}</a>.</div>
            </div>  
        {% endfor %}
    </div>
{% endblock %}

完整报错栈

Traceback (most recent call last):
File "C:\Users\Nazi\AppData\Roaming\Python\Python311\site-packages\django\db\backends\utils.py", line 89, in _execute
return self.cursor.execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Nazi\AppData\Roaming\Python\Python311\site-packages\django\db\backends\sqlite3\base.py", line 328, in execute
return super().execute(query, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The above exception (no such table: auctions_user_user_permissions) was the direct cause of the following exception:
File "C:\Users\Nazi\AppData\Roaming\Python\Python311\site-packages\django\core\handlers\exception.py", line 55, in inner
response = get_response(request)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Nazi\AppData\Roaming\Python\Python311\site-packages\django\core\handlers\base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Nazi\AppData\Roaming\Python\Python311\site-packages\django\utils\decorators.py", line 46, in _wrapper
return bound_method(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Nazi\AppData\Roaming\Python\Python311\site-packages\django\views\decorators\cache.py", line 62, in _wrapper_view_func
response = view_func(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Nazi\AppData\Roaming\Python\Python311\site-packages\django\contrib\admin\sites.py", line 422, in login
**self.each_context(request),
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Nazi\AppData\Roaming\Python\Python311\site-packages\django\contrib\admin\sites.py", line 337, in each_context
"available_apps": self.get_app_list(request),
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Nazi\AppData\Roaming\Python\Python311\site-packages\django\contrib\admin\sites.py", line 536, in get_app_list
app_dict = self._build_app_dict(request, app_label)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Nazi\AppData\Roaming\Python\Python311\site-packages\django\contrib\admin\sites.py", line 478, in _build_app_dict
has_module_perms = model_admin.has_module_permission(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Nazi\AppData\Roaming\Python\Python311\site-packages\django\contrib\admin\options.py", line 611, in has_module_permission
return request.user.has_module_perms(self.opts.app_label)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Nazi\AppData\Roaming\Python\Python311\site-packages\django\contrib\auth\models.py", line 331, in has_module_perms
return _user_has_module_perms(self, app_label)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Nazi\AppData\Roaming\Python\Python311\site-packages\django\contrib\auth\models.py", line 235, in _user_has_module_perms
if backend.has_module_perms(user, app_label):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Nazi\AppData\Roaming\Python\Python311\site-packages\django\contrib\auth\backends.py", line 121, in has_module_perms
for perm in self.get_all_permissions(user_obj)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Nazi\AppData\Roaming\Python\Python311\site-packages\django\contrib\auth\backends.py", line 109, in get_all_permissions
user_obj._perm_cache = super().get_all_permissions(user_obj)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Nazi\AppData\Roaming\Python\Python311\site-packages\django\contrib\auth\backends.py", line 27, in get_all_permissions
*self.get_user_permissions(user_obj, obj=obj),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Nazi\AppData\Roaming\Python\Python311\site-packages\django\contrib\auth\backends.py", line 96, in get_user_permissions
return self._get_permissions(user_obj, obj, "user")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Nazi\AppData\Roaming\Python\Python311\site-packages\django\contrib\auth\backends.py", line 87, in _get_permissions
user_obj, perm_cache_name, {"%s.%s" % (ct, name) for ct, name in perms}
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Nazi\AppData\Roaming\Python\Python311\site-packages\django\db\models\query.py", line 398, in __iter__
self._fetch_all()
^^^^^^^^^^^^^^^^^
File "C:\Users\Nazi\AppData\Roaming\Python\Python311\site-packages\django\db\models\query.py", line 1881, in _fetch_all
self._result_cache = list(self._iterable_class(self))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Nazi\AppData\Roaming\Python\Python311\site-packages\django\db\models\query.py", line 246, in __iter__
return compiler.results_iter(

File "C:\Users\Nazi\AppData\Roaming\Python\Python311\site-packages\django\db\models\sql\compiler.py", line 1511, in results_iter
results = self.execute_sql(

File "C:\Users\Nazi\AppData\Roaming\Python\Python311\site-packages\django\db\models\sql\compiler.py", line 1560, in execute_sql
cursor.execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Nazi\AppData\Roaming\Python\Python311\site-packages\django\db\backends\utils.py", line 102, in execute
return super().execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Nazi\AppData\Roaming\Python\Python311\site-packages\django\db\backends\utils.py", line 67, in execute
return self._execute_with_wrappers(

File "C:\Users\Nazi\AppData\Roaming\Python\Python311\site-packages\django\db\backends\utils.py", line 80, in _execute_with_wrappers
return executor(sql, params, many, context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Nazi\AppData\Roaming\Python\Python311\site-packages\django\db\backends\utils.py", line 84, in _execute
with self.db.wrap_database_errors:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Nazi\AppData\Roaming\Python\Python311\site-packages\django\db\utils.py", line 91, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Nazi\AppData\Roaming\Python\Python311\site-packages\django\db\backends\utils.py", line 89, in _execute
return self.cursor.execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Nazi\AppData\Roaming\Python\Python311\site-packages\django\db\backends\sqlite3\base.py", line 328, in execute
return super().execute(query, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Exception Type: OperationalError at /admin/login/
Exception Value: no such table: auctions_user_user_permissions

问题解决步骤

1. 修复admin面板报错

该错误是用户权限关联表未创建导致,执行以下操作:

  • 运行数据库迁移命令:
    python manage.py makemigrations
    python manage.py migrate
    
  • 若自定义了User模型,检查settings.py中AUTH_USER_MODEL配置是否正确,确保迁移文件已生成并应用。
  • 若迁移无效,删除migrations目录下除__init__.py外的所有文件,重新生成迁移并执行。

2. 修复商品不显示问题

从模板代码看,首页需要items变量,需补充或修改首页视图:

  • 添加首页视图,查询活跃商品并传入模板:
    def index(request):
        items = List.objects.filter(active_bool=True)
        return render(request, "auctions/index.html", {"items": items})
    
  • 检查后台添加的商品active_bool字段是否为True,若商品已被关闭(active_bool=False),首页不会显示,可通过admin面板修改状态。

内容的提问来源于stack exchange,提问作者zahra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 03:35:54