Как создать и сохранить данные, используя ORM в пределах views.py в Django? - PullRequest
0 голосов
/ 22 декабря 2019

У меня есть шаблон, который состоит из кнопки. Если вошедший в систему пользователь нажимает на него, он должен сгенерировать время и сохранить его в модели, а затем извлечь это время в шаблоне. Тем не менее, это не выполняется, как ожидалось. Вот что я сделал:

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 голосов
/ 22 декабря 2019

Когда вы пишете это:

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(), если условие всегда будет истинным (и я не уверен, что ты этого тоже не хочешь).

0 голосов
/ 22 декабря 2019

Вы не должны использовать values_list, поскольку он возвращает список значений. Может быть, вы должны использовать последнюю запись от этого пользователя. Также вы должны использовать метод query (set) ().

Попробуйте это:

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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...