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

Django创建Primary模型时仅显示当前用户的Album数据

解决方法

1. 给Album模型添加用户关联字段

首先确认你的Album模型是否关联了用户,没有的话先补上这个字段,用来标记每个Album的创建者:

# models.py
from django.contrib.auth.models import User

class Album(models.Model):
    # 保留你原有的其他字段
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user_albums')
    # 添加后记得执行迁移:`python manage.py makemigrations` 和 `python manage.py migrate`

2. 修改视图的Album查询逻辑

在处理Primary创建请求的视图里,把全量查询改成只筛选当前登录用户的Album:

# views.py
from django.contrib.auth.decorators import login_required
from .models import Album, Primary

@login_required  # 限制只有登录用户能访问该视图
def create_primary(request):
    if request.method == 'GET':
        # 只获取当前用户创建的Album
        user_albums = Album.objects.filter(user=request.user)
        return render(request, 'create_primary.html', {'albums': user_albums})
    elif request.method == 'POST':
        # 处理表单提交时,额外校验Album属于当前用户
        album_id = request.POST.get('year_of_graduations')
        try:
            target_album = Album.objects.get(id=album_id, user=request.user)
        except Album.DoesNotExist:
            # 处理用户提交不属于自己的Album的情况,比如返回错误提示
            return render(request, 'create_primary.html', {'albums': Album.objects.filter(user=request.user), 'error': '无效的专辑选择'})
        
        # 构建Primary实例并保存
        primary = Primary(
            year_of_graduations=target_album,
            # 赋值其他字段
        )
        primary.save()
        # 跳转或返回成功响应

3. 模板中的HTML表单

模板里的下拉框只会渲染当前用户的Album选项:

<!-- create_primary.html -->
<form method="POST">
    {% csrf_token %}
    {% if error %}
        <p style="color:red;">{{ error }}</p>
    {% endif %}
    <label for="year_of_graduations">毕业年份专辑:</label>
    <select name="year_of_graduations" id="year_of_graduations" required>
        {% for album in albums %}
            <option value="{{ album.id }}">{{ album.title }}</option> <!-- 替换成你Album模型里用来显示的字段 -->
        {% endfor %}
    </select>
    <!-- 其他表单字段 -->
    <button type="submit">提交</button>
</form>

关键说明

  • @login_required必须加上,防止匿名用户访问时request.user出现异常。
  • POST请求里的Album校验不能少,避免用户通过修改表单参数提交不属于自己的Album数据。

内容的提问来源于stack exchange,提问作者Adamu Abdulkarim Dee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:30:42