问题描述
我的应用程序具有用户模型,我向其分配了不同的程序。每个程序包含不同的练习,对于每个练习,用户需要根据自己的练习填写结果。
因此,基本上,本练习的HTML页面需要包含另一种提供用户输入区域的表格。
程序模型:
class Program(models.Model):
patient = models.ForeignKey(User,on_delete=models.CASCADE,default=0)
program_name = models.CharField(max_length=1000,default="")
date_posted = models.DateTimeField(default=timezone.Now)
def __str__(self):
return str(self.id) + " - " + self.patient.username + " - " + self.program_name + " - " + str(self.date_posted)
def get_absolute_url(self):
return reverse('program-detail',kwargs={'pk': self.pk})
运动模式:
class Exercise(models.Model):
program = models.ForeignKey(Program,default=0)
date_posted = models.DateTimeField(default=timezone.Now)
name = models.CharField(max_length=1000,default="")
description = models.TextField(default="")
load_share = models.TextField(default="")
breath_method = models.TextField(default="")
recovery_method = models.TextField(default="")
measure_method = models.TextField(default="")
notes = models.TextField(default="")
extra_info = models.TextField(default="")
reps = models.PositiveSmallIntegerField(default=0)
sets = models.PositiveSmallIntegerField(default=0)
def __str__(self):
return str(self.program_id) + " - " + str(self.pk) + " - " + " - " + self.name + " - " + str(self.date_posted)
数据模型:
class Data(models.Model):
exercise = models.ForeignKey(Exercise,default="0")
set_number = models.PositiveSmallIntegerField(default=0)
spo2 = models.PositiveSmallIntegerField(default=0)
hr = models.PositiveSmallIntegerField(default=0)
physical_level = models.PositiveSmallIntegerField(default=0)
breath_level = models.PositiveSmallIntegerField(default=0)
sys = models.PositiveSmallIntegerField(default=0)
dia = models.PositiveSmallIntegerField(default=0)
misc_input = models.PositiveSmallIntegerField(default=0)
def __str__(self):
return self.exercise.name
程序视图(列表,创建,更新,删除):
class ProgramListView(LoginrequiredMixin,ListView):
model = Program
template_name = 'program/prog.html' # <app>/<model>_<viewtype>.html
context_object_name = 'programs'
def get_queryset(self):
return Program.objects.filter(patient=self.request.user)
class ProgramCreateView(LoginrequiredMixin,UserPassesTestMixin,CreateView):
model = Program
fields = ['patient','program_name']
def test_func(self):
return self.request.user.is_superuser or self.request.user.is_staff
class ProgramUpdateView(LoginrequiredMixin,UpdateView):
model = Program
fields = ['patient','program_name']
def test_func(self):
return self.request.user.is_superuser or self.request.user.is_staff
class ProgramDeleteView(LoginrequiredMixin,DeleteView):
model = Program
success_url = reverse_lazy('admin_page')
def test_func(self):
return self.request.user.is_superuser or self.request.user.is_staff
锻炼视图(列出,创建,更新,删除):
class ExerciseListView(LoginrequiredMixin,ListView):
model = Exercise
context_object_name = 'exercises'
paginate_by = 1
def get_queryset(self):
program_num = get_object_or_404(Program,pk=self.kwargs.get('pk'))
return Exercise.objects.filter(program=program_num)
class ExerciseCreateView(LoginrequiredMixin,CreateView):
model = Exercise
fields = ['program','name','description','load_share','breath_method','recovery_method','measure_method','notes','extra_info','reps','sets']
success_url = reverse_lazy('admin_page')
def test_func(self):
return self.request.user.is_superuser or self.request.user.is_staff
class ExerciseUpdateView(LoginrequiredMixin,UpdateView):
model = Exercise
fields = ['program','sets']
success_url = reverse_lazy('admin_page')
def test_func(self):
return self.request.user.is_superuser or self.request.user.is_staff
class ExerciseDeleteView(LoginrequiredMixin,DeleteView):
model = Exercise
success_url = reverse_lazy('admin_page')
def test_func(self):
return self.request.user.is_superuser or self.request.user.is_staff
数据视图:
(我的第一步是为此模型创建一个CreateView,而不是想出如何在Exercise ListView模板中实现它,但我不确定它的正确方法)。 另一个问题-需要从用户当前正在执行的练习中自动填写“运动”输入。
class DataCreateView(LoginrequiredMixin,CreateView):
model = Data
fields = ['set_number','spo2','hr','physical_level','breath_level','sys','dia','misc_input']
锻炼模板:
{% extends "program/base.html" %}
{% block content %}
<h3> Program Exercises List </h3>
{% for exercise in exercises %}
<article class="media content-section">
<div class="media-body">
<div class="article-Metadata">
{% if user.is_superuser %}
<a class="btn btn-secondary btn-sm mt-1 mb-1" href="{% url 'exercise-update' exercise.id %}">Update</a>
<a class="btn btn-danger btn-sm mt-1 mb-1" href="{% url 'exercise-delete' exercise.id %}">Delete</a>
<p class="article-content">{{ exercise.name }}</p>
{% else %}
<p class="article-content">{{ exercise.name }}</p>
{% endif %}
</div>
<div class="article-Metadata">
<p class="article-content">Exercise Description - {{ exercise.description }}</p>
<p class="article-content">Breathing Method - {{ exercise.breath_method}}</p>
<p class="article-content">Recovery Method - {{ exercise.recovery_method }}</p>
<p class="article-content">Measuring Method - {{ exercise.measure_method }}</p>
<p class="article-content">Exercise Load - {{ exercise.load_share }}</p>
<p class="article-content">Notes - {{ exercise.notes }}</p>
<p class="article-content">Extra @R_640_4045@ion - {{ exercise.extra_info }}</p>
<p class="article-content">Number of Repetiton - {{ exercise.reps }}</p>
<p class="article-content">Number of Sets - {{ exercise.sets }}</p>
</div>
</div>
</article>
{% endfor %}
{% if is_paginated %}
{% if page_obj.has_prevIoUs %}
<a class="btn btn-outline-info mb-4" href="?page={{ page_obj.prevIoUs_page_number }}">PrevIoUs Exercise</a>
{% endif %}
{% if page_obj.has_next %}
<a class="btn btn-outline-info mb-4" href="?page={{ page_obj.next_page_number }}">Next Exercise</a>
{% else %}
<a class="btn btn-outline-info mb-4" href="{% url 'web-home' %}">Exit</a>
{% endif %}
{% endif %}
{% endblock content %}
将数据表单实现到“练习”列表视图中的最佳方法是什么?
谢谢! (希望我没有错过任何相关代码)
我的问题的更新:
因此,昨天,我找到了一种从论坛中的一个问题中将表单插入ListView的方法。 我编辑了ListView:
class ExerciseListView(LoginrequiredMixin,pk=self.kwargs.get('pk'))
return Exercise.objects.filter(program=program_num)
def get_context_data(self,**kwargs):
context = super(ExerciseListView,self).get_context_data(**kwargs)
context['form'] = DataPatient()
return context
我添加了一个连接到数据模型的FormView,而不是使用get_context_data
将其添加到ListView模板中。
我仍然无法弄清的一个问题是如何在我的数据模型(我目前正在做的练习)中分配给exercise
属性。
我有人知道,这将是完美的。
谢谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)