python - Django师生模型过滤数据
问题描述
我在 Django 中有一个用户模型,其中用户类型字段是教师的“管理员”,否则是“学生”。
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(unique=False)
username = models.CharField(max_length=25, unique=True)
password = models.CharField(max_length=50)
usertype = models.CharField(max_length=140, null=True)
teacher = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
null = True
)
objects = UserManager()
我还有一个用于学生数据的 Django 模型:
class Row(models.Model):
user = models.TextField(max_length=500, blank=True)
question = models.TextField(max_length=500, blank=True)
answer = models.TextField(max_length=500, blank=True)
当老师登录时,我会显示他们的学生列表并希望他们能够查看学生数据的副本(应该弹出一个模式)。
<table>
<h2>Students Directory: </h2>
<tr>
<th>Name</th>
<th>Email</th>
<th>Download Data</th>
</tr>
{% for student in usertable %}
<tr>
<td>{{ student.first_name }} {{ student.last_name}} </td>
<td>{{ student.email }}</td>
<td><a onclick="viewData({{student.username}});"> Download Link </a></td>
</tr>
{% endfor %}
</table>
所以,我将学生的用户名传递给 viewData() 并且应该会弹出模式。但是,该函数是用 javascript 编写的,我不能执行类似“Row.objects.all.filter(username=username)”的操作。但是,我无法将已过滤的对象传递到 profile.html,因为我不知道我需要哪个学生的用户名。
可能有一个简单的解决方案,我在某处丢失了。
TLDR - 在我的 profile.html 项目中,我想单击一个按钮并弹出一个模式,其中我的 Django 模型由某个用户名过滤(可能会有所不同)
解决方案
你有2个选择,
1-当您单击按钮时添加一个 ajax 调用,它像这样从服务器获取特定的用户数据,因此您还需要服务器上的一个函数来处理它。例如,
在 js 中(假设使用了 Jquery)
$.ajax(url_to_student_info_view).done(function() {
// js to fill data in the modal html
})
在你看来,
from django.core import serializers
def get_student_info(request, student_id):
return HttpResponse(serializers.serialize('json', [ Row.objects.get(pk=student_id), ])) # very rough but dont forget to check of the user exists before your return
2-您的另一个选择是为每个学生信息创建一个模式,因此,在您的 html 中,
{% for student in students %}
<div class="modal" id="student-{{ student.id }}">
<!-- student info here -->
</div>
{% endfor %}
那么你的 js 函数基本上会根据提供的 ID 打开该模式student-ID
。
你应该使用哪一个?
两者都可以,第一个是我会采取的方法,因为第二个可能会根据学生的数量大幅增加 DOM 的大小。
希望这可以帮助!
推荐阅读
- mysql - 对同一张表中的用户数求和并计数
- python - 如何仅在二维列表的第一列中使用 min()
- protractor - 量角器:受控启用流和控制禁用流是否可以在量角器中一起工作,直到移动到控制禁用流。?
- java - 从键盘输入时按退格键可删除多个字符
- django - 堆栈:docker + nginx + postgres + django 数据丢失
- azure - 将单个记录传递给复制活动
- python - yaml.scanner.ScannerError:在此上下文中不允许映射值(Python 黑盒测试帮助)
- php - SOAP-ERROR:解析 WSDL:无法从 'HTTPS 加载 不使用 https
- android - 方法“getQuotes”在 null 上被调用。接收方:null 尝试调用:getQuotes()
- list - Ansible:将带有 unicode 的列表转换为字符串列表(并比较它们)