У меня твоя проблема. Прежде всего, ваша выдумка models.py немного ошибочна. Вы можете использовать классы моделей следующим образом:
from django.db import models
from django.forms import ModelForm
# Create your models here.
class Volunteer(models.Model):
full_name = models.CharField(max_length=200)
phone_number = models.CharField(max_length=30)
email = models.CharField(max_length=255)
national_id = models.CharField(max_length=255)
def __str__(self):
return self.full_name
class Login(models.Model):
full_name = models.CharField(max_length=200,default="", null=True)
national_id = models.CharField(max_length=200,default="", null=True)
check_in = models.DateTimeField(auto_now_add=True, editable=True) # <--- You can use editable arg inline.
check_out = models.DateTimeField(auto_now=True, editable=True) # <--- You can use editable arg inline.
def __str__(self):
return self.full_name
Я думаю, вы не используете сеанс авторизации. Просто кто-то заполняет информацию и публикует эту информацию в БД. Зачем вам два класса как «Волонтер» и «Логин»? Имеют ли они какое-либо отношение или вам нужны две модели? Возможно, это лучше, чем это:
class Volunteer(models.Model):
full_name = models.CharField(max_length=200, unique=True)
phone_number = models.CharField(max_length=30)
email = models.CharField(max_length=255)
national_id = models.CharField(max_length=255, unique=True)
check_in = models.DateTimeField(auto_now_add=True, editable=True) #<-- auto_now_add=True args mean: when you call .save() method first time, this field is filled in with the current date and time.
check_out = models.DateTimeField(auto_now=True, editable=True) #<-- auto_now=True args mean: when you call .save() method second and next times (every updating), this field is filled in with the current date and time.
def __str__(self):
return self.full_name
Вам нужны две функции, первая была выполнена (def addCheckIn), поэтому вы вызываете метод .save () для сохранения новых добровольцев. Второй - для обновления (например, def checkout (request)). Поэтому вам следует снова вызвать метод .save () следующим образом:
def checkout(request):
national_id = request.POST['national_id'], # If national_id is unique, It's enough.
try: #Check this national id is exist in your db.
person = Login.objects.get(national_id=national_id)
person.save()
messages.success(request, "Thank you for checkout blabla")
return HttpResponseRedirect('/login/') # Maybe you can create a success page.
except LoginDoesNotExist: # If doesn't you can show error message.
messages.error(request, "No such registry was found in the system.")
return redirect("/login/")
Последний, когда вы даете имя функциям, вы должны использовать подчеркивание, а не верблюд. (например, def add_check_in ()). Это просто правило написания Python для pep8. Я надеюсь, что это поможет вам.