首页 > 解决方案 > 如何在Django的views.py中使用ORM创建和保存数据?

问题描述

我有一个由按钮组成的模板。如果登录用户单击它,它应该生成一个时间并将其保存在模型中,然后在模板中检索该时间。但是,这并没有按预期执行。这就是我所做的:

模型.py:

class Mytime(models.Model):
    pid= models.ForeignKey(User, on_delete = models.CASCADE)
    time = models.DateTimeField()

视图.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.

接口.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 函数有什么问题吗?

标签: djangoorm

解决方案


您不应使用 values_list,因为它返回值列表。可能您应该使用该用户的最后一个条目。你也应该使用查询集的 exists() 方法。

尝试这个:

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.

推荐阅读