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

Django中getqestion视图无法关联问题对应选项的技术问询

Django问题解决:Question与Choice关联异常修复

1. 先确认模型关联的正确性

检查Choice模型和Question的外键关联,必须设置正确的反向关联名称,这样才能直接通过问题对象获取它的专属选项:

# models.py
class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE, related_name='choices')
    text = models.CharField(max_length=200)
    # 其他字段按需添加

这里的related_name='choices'是核心,后续可以用question.choices.all()直接拿到该问题的所有选项,避免用默认的choice_set(容易写错)。

2. 修正视图的查询逻辑

在getqestion视图里,查询Items_buy对应的问题时,要一次性预加载关联的选项,既避免重复查询数据库,也能保证数据关联准确:

# views.py
from django.shortcuts import get_object_or_404, render
from .models import Items_buy

def getqestion(request, item_pk):
    # 预加载item关联的所有questions,以及每个question的choices
    item = get_object_or_404(Items_buy.objects.prefetch_related('questions__choices'), pk=item_pk)
    # 取出该item对应的所有问题
    questions = item.questions.all()
    return render(request, '模板文件名.html', {'questions': questions})

3. 调整前端模板的遍历逻辑

模板里必须先遍历每个问题,再在每个问题下遍历它自己的选项,不能直接遍历所有选项:

<!-- 你的HTML模板 -->
{% for question in questions %}
    <div class="question-item">
        <h4>{{ question.text }}</h4>
        <div class="choices">
            {% for choice in question.choices.all %}
                <span>{{ choice.text }}</span>
            {% empty %}
                <p>这个问题还没有选项</p>
            {% endfor %}
        </div>
    </div>
{% empty %}
    <p>当前商品没有对应的问题</p>
{% endfor %}

之前的问题大概率是模板里直接遍历了所有Choice集合,而没有绑定到每个Question的choices属性上。

4. 确认URL配置没问题

检查urls.py里的路由是否正确接收item_pk参数:

# urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('questions/<int:item_pk>/', views.getqestion, name='getqestion'),
]

最后测试验证

去后台创建测试数据:

  • 创建一个Items_buy实例(比如pk=1)
  • 给它加两个Question:test1、test2
  • 给test1加da、net、HY TAKOE三个选项;给test2加2、1、3三个选项
    然后访问对应路由(比如/questions/1/),看看每个问题是不是只显示自己的专属选项。

内容的提问来源于stack exchange,提问作者Богдан Савищев

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 10:10:31