如何在Django的views.py中使用ORM创建和保存数据?

时间:2019-12-22 15:37:53

标签: django orm

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

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

2 个答案:

答案 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()中,则条件始终为真(并且我不确定那不是您想要的)。