Как использовать тумблер с логическим полем django? - PullRequest
1 голос
/ 14 апреля 2019

У меня есть модель work_experience, которая содержит поле «is_working», которое истинно, когда пользователь все еще работает в компании. На внешнем интерфейсе я использую тумблер и хочу изменить значение логического поля «is_working» по клику. Какой должна быть логика для использования переключателя в django?

Тумблер

HTML

<div style="display:inline-block">
    <label>Currently working here?</label>
    <label class="switch">
        <input type="checkbox">
        <span class="slider round"></span>
    </label>
</div>

Модель

class Work_Experience(models.Model):
    job_title       = models.CharField(max_length=100, null=True, blank=True)
    company         = models.CharField(max_length=100, null=True, blank=True)
    description     = models.CharField(max_length=300, null=True, blank=True)
    exp_start_date  = models.DateField(null=True, blank=True)
    exp_end_date    = models.DateField(null=True, blank=True)
    is_working      = models.BooleanField(default=False)

1 Ответ

0 голосов
/ 14 апреля 2019

Неправильно указывать параметр null=True для CharField.

Если вы хотите изменить значение логического поля is_working при нажатии, вам нужно использовать Jquery .

Я создал приложение с именем toggle, поэтому вам нужно заменить его на имя вашего приложения.

вот полный код

urls.py ::

from django.urls import path
from toggle.views import home, toggle

urlpatterns = [
    path('', home),
    path('toggle/', toggle),
]

views.py:

from django.shortcuts import render
def home(request):
    w, created = Work_Experience.objects.get_or_create(id=1)
    return render(request,'home.html', {'workexperiance': w})

from django.http import HttpResponse
from toggle.models import Work_Experience
def toggle(request):
    w = Work_Experience.objects.get(id=request.POST['id'])
    w.is_working = request.POST['isworking'] == 'true'
    w.save()
    return HttpResponse('success')

home.html:

<div style="display:inline-block">
    <label>Currently working here?</label>
    <label class="switch">
        <input type="checkbox" id="checkbox" value="{{workexperiance.is_working}}">
        <span class="slider round"></span>
    </label>
</div>
<script src="https://code.jquery.com/jquery-3.3.1.js"></script> <!-- Import Jquery Here-->
<script type="text/javascript">
$(document).ready(function() {
    $('#checkbox').change(function() {
        $.post("/toggle/", {
            id: '{{workexperiance.id}}', 
            isworking: this.checked, 
            csrfmiddlewaretoken: '{{ csrf_token }}' 
        });
    });
}); 
</script>

пробег: ./manage.py runserver и визит: http://localhost:8000

когда вы установите флажок В настоящее время работает здесь изменить значение логического поля "is_working".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...