检查用户之前是否用 Django 填写过问卷
Check if user had filled questionnaire before with Django
我正在做一份调查问卷,我制作了一个页面,用户可以在其中列出要填写的问卷以及他之前填写过的问卷,但我卡住了。
我喜欢检查用户之前是否填写了 form/questionnaire 以及他是否没有向他展示问卷 link。
我的解决方案不起作用,因为它会在用户填写问卷时检查数据库,但如果他没有填写(数据库中没有他的行),它会在我的 table 中显示一个空白单元格。
(我不知道 exists query 是否是一个解决方案,但我无法让它工作)
main.html
{% for i in oke_vezetoi %}
{% if i.vezetoi_ok == True %}
<td><button class="btn btn-sm btn-outline-info"> <a href="{% url 'stressz:vezetoi_item' %}">Kitöltöm</a></button>
<td><i class="fas fa-running fa-2x text-dark"></i></td>
{% else %}
<td class="text-success text-uppercase">Kitöltötted</button>
<td><i class="fas fa-check fa-2x text-success"></i></td>
{% endif %}
{% endfor %}
views.py
def main(request):
oke_vezetoi = Vezetoi.objects.filter(user_name=request.user)
oke_stressz = Stressz_teszt.objects.filter(user_name=request.user)
context = {
'oke_vezetoi': oke_vezetoi,
'oke_stressz': oke_stressz,
}
return render(request, 'stressz/main.html', context)
models.py
class Vezetoi(models.Model):
def __str__(self):
return str(self.user_name)
user_name = models.ForeignKey(User, on_delete=models.CASCADE, default=1)
vezetoi_v01 = models.IntegerField( null=True)
vezetoi_v02 = models.IntegerField( null=True)
vezetoi_v03 = models.IntegerField( null=True)
vezetoi_v04 = models.IntegerField( null=True)
vezetoi_v05 = models.IntegerField( null=True)
vezetoi_v06 = models.IntegerField( null=True)
vezetoi_v07 = models.IntegerField( null=True)
vezetoi_v08 = models.IntegerField( null=True)
vezetoi_v09 = models.IntegerField( null=True)
vezetoi_v10 = models.IntegerField( null=True)
vezetoi_v11 = models.IntegerField( null=True)
vezetoi_v12 = models.IntegerField( null=True)
vezetoi_ok = models.BooleanField()
forms.py
class VezetoiForm(forms.ModelForm):
class Meta:
model = Vezetoi
fields = ['vezetoi_v01', 'vezetoi_v02', 'vezetoi_v03', 'vezetoi_v04', 'vezetoi_v05', 'vezetoi_v06', 'vezetoi_v07', 'vezetoi_v08', 'vezetoi_v09', 'vezetoi_v10', 'vezetoi_v11', 'vezetoi_v12', 'vezetoi_ok' ]
我不确定我是否正确解释了你的问题,但似乎有一些你可以优化的地方。
- 听起来
Vezetoi
模型中每个用户应该只有一个条目。
如果这是真的,你应该强制执行 ForeignKey(unique=True)
,你不需要 for 循环,你可以在 views.py
中使用 Vezetoi.objects.get()
如果这不是真的,并且每个用户有多个 Vezetoi
个整数,您可能希望每个整数都有一个 Vezetoi
对象。
- 如果用户没有提交问卷,那么
Vezetoi
模型对象将不存在。
由于对象不存在,它不会出现在oke_vezetoi
查询集中,所以对象属性i.vezetoi_ok
不会在你的循环中找到(这这就是为什么你的 table 行是空白的)。
假设字段vezetoi_ok
仅用于检查问卷是否存在,它只能为真,因此您可以将其从模型定义中删除。
如果这些不正确,我将需要修改答案,我会要求您提供更多信息,以了解这些模型正在跟踪的内容、Stressz_teszt
模型的内容以及 urls.py
以及 VezetoiForm
的实现方式。
所以在我所描述的情况下,我会使用基于 class 的视图和 get_context_data
方法来做到这一点。
models.py
class Vezetoi(models.Model):
def __str__(self):
return str(self.user_name)
user_name = models.ForeignKey(User, on_delete=models.CASCADE, unique=True)
vezetoi_v01 = models.IntegerField(null=True)
...
# vezetoi_ok = models.BooleanField()
forms.py
class VezetoiForm(forms.ModelForm):
class Meta:
model = Vezetoi
fields = '__all__'
views.py
class MainView(TemplateView):
template_name = 'main.html'
def get_context_data(self, **kwargs):
context = super().get_context_data()
context['oke_vezetoi'] = Vezetoi.objects.get(user_name=request.user)
context['oke_stressz'] = Stressz_teszt.objects.get(user_name=request.user)
return context
main.html
{% extends 'base.html' %}
{% if oke_vezetoi %}
{# do not display link #}
{% else %}
{# display link #}
{% endif %}
我正在做一份调查问卷,我制作了一个页面,用户可以在其中列出要填写的问卷以及他之前填写过的问卷,但我卡住了。 我喜欢检查用户之前是否填写了 form/questionnaire 以及他是否没有向他展示问卷 link。 我的解决方案不起作用,因为它会在用户填写问卷时检查数据库,但如果他没有填写(数据库中没有他的行),它会在我的 table 中显示一个空白单元格。 (我不知道 exists query 是否是一个解决方案,但我无法让它工作)
main.html
{% for i in oke_vezetoi %}
{% if i.vezetoi_ok == True %}
<td><button class="btn btn-sm btn-outline-info"> <a href="{% url 'stressz:vezetoi_item' %}">Kitöltöm</a></button>
<td><i class="fas fa-running fa-2x text-dark"></i></td>
{% else %}
<td class="text-success text-uppercase">Kitöltötted</button>
<td><i class="fas fa-check fa-2x text-success"></i></td>
{% endif %}
{% endfor %}
views.py
def main(request):
oke_vezetoi = Vezetoi.objects.filter(user_name=request.user)
oke_stressz = Stressz_teszt.objects.filter(user_name=request.user)
context = {
'oke_vezetoi': oke_vezetoi,
'oke_stressz': oke_stressz,
}
return render(request, 'stressz/main.html', context)
models.py
class Vezetoi(models.Model):
def __str__(self):
return str(self.user_name)
user_name = models.ForeignKey(User, on_delete=models.CASCADE, default=1)
vezetoi_v01 = models.IntegerField( null=True)
vezetoi_v02 = models.IntegerField( null=True)
vezetoi_v03 = models.IntegerField( null=True)
vezetoi_v04 = models.IntegerField( null=True)
vezetoi_v05 = models.IntegerField( null=True)
vezetoi_v06 = models.IntegerField( null=True)
vezetoi_v07 = models.IntegerField( null=True)
vezetoi_v08 = models.IntegerField( null=True)
vezetoi_v09 = models.IntegerField( null=True)
vezetoi_v10 = models.IntegerField( null=True)
vezetoi_v11 = models.IntegerField( null=True)
vezetoi_v12 = models.IntegerField( null=True)
vezetoi_ok = models.BooleanField()
forms.py
class VezetoiForm(forms.ModelForm):
class Meta:
model = Vezetoi
fields = ['vezetoi_v01', 'vezetoi_v02', 'vezetoi_v03', 'vezetoi_v04', 'vezetoi_v05', 'vezetoi_v06', 'vezetoi_v07', 'vezetoi_v08', 'vezetoi_v09', 'vezetoi_v10', 'vezetoi_v11', 'vezetoi_v12', 'vezetoi_ok' ]
我不确定我是否正确解释了你的问题,但似乎有一些你可以优化的地方。
- 听起来
Vezetoi
模型中每个用户应该只有一个条目。
如果这是真的,你应该强制执行 ForeignKey(unique=True)
,你不需要 for 循环,你可以在 views.py
Vezetoi.objects.get()
如果这不是真的,并且每个用户有多个 Vezetoi
个整数,您可能希望每个整数都有一个 Vezetoi
对象。
- 如果用户没有提交问卷,那么
Vezetoi
模型对象将不存在。
由于对象不存在,它不会出现在
oke_vezetoi
查询集中,所以对象属性i.vezetoi_ok
不会在你的循环中找到(这这就是为什么你的 table 行是空白的)。假设字段
vezetoi_ok
仅用于检查问卷是否存在,它只能为真,因此您可以将其从模型定义中删除。
如果这些不正确,我将需要修改答案,我会要求您提供更多信息,以了解这些模型正在跟踪的内容、Stressz_teszt
模型的内容以及 urls.py
以及 VezetoiForm
的实现方式。
所以在我所描述的情况下,我会使用基于 class 的视图和 get_context_data
方法来做到这一点。
models.py
class Vezetoi(models.Model):
def __str__(self):
return str(self.user_name)
user_name = models.ForeignKey(User, on_delete=models.CASCADE, unique=True)
vezetoi_v01 = models.IntegerField(null=True)
...
# vezetoi_ok = models.BooleanField()
forms.py
class VezetoiForm(forms.ModelForm):
class Meta:
model = Vezetoi
fields = '__all__'
views.py
class MainView(TemplateView):
template_name = 'main.html'
def get_context_data(self, **kwargs):
context = super().get_context_data()
context['oke_vezetoi'] = Vezetoi.objects.get(user_name=request.user)
context['oke_stressz'] = Stressz_teszt.objects.get(user_name=request.user)
return context
main.html
{% extends 'base.html' %}
{% if oke_vezetoi %}
{# do not display link #}
{% else %}
{# display link #}
{% endif %}