如何在Django中通过ForeignKey过滤Skills数据并对应Entrepreneur展示到前端?
针对指定Entrepreneur过滤Skills数据并展示到前端的方案
首先先修正你提供的模型代码里的语法错误,否则会导致运行报错:
from django.db import models from django.core.validators import MinValueValidator, MaxValueValidator class Entrepreneur(models.Model): # 补充你的业务字段,比如姓名、简介等 name = models.CharField(max_length=100) # ...其他字段 class Skills(models.Model): usevalue = models.ForeignKey(Entrepreneur, on_delete=models.CASCADE) # 建议添加on_delete参数,避免数据库关联异常 rating = models.PositiveSmallIntegerField( validators=[MinValueValidator(0), MaxValueValidator(5)] ) # 补充技能名称字段,用来区分不同技能类型 skill_name = models.CharField(max_length=50)
后端过滤数据
有两种常用方式获取指定创业者的技能数据:
方式一:通过外键筛选
先获取指定的Entrepreneur实例,再用filter方法筛选关联的Skills:
from django.shortcuts import get_object_or_404, render from .models import Entrepreneur, Skills def entrepreneur_skills(request, entrepreneur_id): # 根据ID获取创业者,不存在则返回404页面 entrepreneur = get_object_or_404(Entrepreneur, id=entrepreneur_id) # 过滤该创业者的所有技能数据 skills = Skills.objects.filter(usevalue=entrepreneur) # 将数据传递给前端模板 return render(request, 'entrepreneur_skills.html', { 'entrepreneur': entrepreneur, 'skills': skills })
方式二:反向查询(更简洁)
Django会为外键自动生成反向查询管理器(默认是模型名_set),直接通过创业者实例获取关联技能:
# 替代上面的skills = Skills.objects.filter(usevalue=entrepreneur) skills = entrepreneur.skills_set.all()
如果想自定义反向查询的名称,可以在ForeignKey中添加related_name参数,比如:
usevalue = models.ForeignKey(Entrepreneur, on_delete=models.CASCADE, related_name='skills')
之后就可以直接用entrepreneur.skills.all()获取技能数据。
配置URL路由
在应用的urls.py中添加路由,让前端可以通过ID访问指定创业者的技能页面:
from django.urls import path from . import views urlpatterns = [ # 其他路由... path('entrepreneurs/<int:entrepreneur_id>/skills/', views.entrepreneur_skills, name='entrepreneur_skills'), ]
前端模板展示
创建模板文件entrepreneur_skills.html,用Django模板语法渲染数据:
<h3>{{ entrepreneur.name }}的技能评分</h3> {% if skills %} <ul> {% for skill in skills %} <li>{{ skill.skill_name }}:{{ skill.rating }}/5</li> {% endfor %} </ul> {% else %} <p>该创业者暂无技能数据</p> {% endif %}
内容的提问来源于stack exchange,提问作者flavien
相关产品推荐
相关产品推荐

