我有一个包含按钮的模板。如果登录的用户单击它,它将生成一个时间并将其保存在模型中,并在模板中检索该时间。但是,这不能按预期执行。这就是我所做的:
models.py:
class Mytime(models.Model):
pid= models.ForeignKey(User, on_delete = models.CASCADE)
time = models.DateTimeField()
views.py:
def generate_time(request):
if request.method == 'GET':
current_time = timezone.now()
user_id = User.objects.get(username=request.GET.get('username')).pk
if (Mytime.objects.filter(id__exact=user_id, time=current_time) in (None, '')):
time = Mytime.objects.create(time=current_time)
else:
pass
data = Mytime.objects.values_list('time', flat=True)
return HttpResponse(data) #return time to the template.
interface.html:
{% block content %}
<div class="content-section">
<button type="button" class="btn btn-outline-info" id ='get_time'> Click me </button>
<h4 id='insert_time'></h4> //should display the time here from model
</div>
{% endblock content %}
接口模板中的JS AJAX代码:
<script type="text/javascript">
$('#punchin').click(function () {
username = localStorage.getItem('username');
console.log(username)
$.ajax({
cache: false,
url: {% url 'generate_time' %},
type: 'GET',
data: {username: username},
success: function(data) {
$("#insert_time").html(data.value);
}
});
});
</script>
但是,在执行期间不会产生时间。 AJAX调用有效,但是if / else条件没有执行。我应该怎么做?我的views.py函数有什么问题吗?
答案 0 :(得分:0)
您不应使用values_list,因为它会返回值列表。可能是您应该使用该用户的最后一个条目。 另外,您应该使用queryset的exist()方法。
尝试一下:
def generate_time(request):
if request.method == 'GET':
if not Mytime.objects.filter(pid=request.user).exists():
current_time = timezone.now()
my_time = Mytime.objects.create(time=current_time, pid=user)
data = my_time.time
else:
data = Mytime.objects.filter(pid=request.user).last().time
return HttpResponse(data) #return time to the template.
答案 1 :(得分:0)
当您写这篇文章时:
if (Mytime.objects.filter(id__exact=user_id, time=current_time) in (None, ''))
这太复杂了。我认为您只想检查是否存在这样的对象,因此您应该像这样:
if not Mytime.objects.filter(id__exact=user_id, time=current_time).exists():
# do stuff
此外,我不太了解您要使用id
做些什么。您的pid
对象中有一个Mytime
用户,为什么不使用它?
如果您真的想将time=current_time
的内容保留在filter()
中,则条件始终为真(并且我不确定那不是您想要的)。