Не удалось сохранить в базе данных SQLite базу данных django

У меня следующие коды:

models.py

class Job(models.Model):

    jobname = models.CharField(max_length = 1000)
    owner = models.CharField(max_length = 150)
    enabled = models.BooleanField()
    freq_type = models.IntegerField(default = 1)
    freq_interval = models.IntegerField(default = 0)
    freq_recurrence = models.IntegerField(default = 0)
    start_date=models.CharField(max_length=10)
    end_date=models.CharField(max_length=10, blank = True)
    start_time=models.CharField(max_length=6)
    end_time=models.CharField(max_length=6, blank = True)
    date_added = models.DateTimeField(auto_now_add = True, null = True)
    date_modified=models.DateTimeField(auto_now = True, null = True)
    version=models.IntegerField(default = 1)

class Job_removed(models.Model):

    jobname = models.CharField(max_length = 1000)
    owner = models.CharField(max_length = 150)
    enabled = models.BooleanField(null = True)
    freq_type = models.IntegerField(default = 1)
    freq_interval = models.IntegerField(default = 0)
    freq_recurrence = models.IntegerField(default = 0)
    start_date=models.CharField(max_length=10)
    end_date=models.CharField(max_length=10, blank = True)
    start_time=models.CharField(max_length=6)
    end_time=models.CharField(max_length=6, blank = True)
    date_added = models.DateTimeField(null = True)
    date_modified=models.DateTimeField(default=timezone.now)
    version=models.IntegerField(null=True)

views.py

def job_delete(request,pk):
    job=Job.objects.get(pk=pk)
    jobdetail = Job_detail.objects.get(job=pk)
    
    if request.method == "POST":
        jobr = JobRemovedForm(request.POST)
        
        if jobr.is_valid():
            jobr.jobname = job.jobname
            print(jobr.jobname)
            jobr.owner = job.owner
            print(jobr.owner)
            jobr.enabled = job.enabled
            print(jobr.enabled)
            jobr.start_date = job.start_date
            print(jobr.start_date)
            jobr.start_time = job.start_time
            print(jobr.start_time)
            jobr.date_added = job.date_added
            print(jobr.date_added)
            jobr.version = job.version
            print(jobr.version)
            jobr.save()
            return redirect('/job/', {'job':Job.objects.all})
        else:
            jobr = JobRemovedForm()
           
            return render(request, 'interface/job_removed.html', {'job':job, 'jobdetail':jobdetail, 'jobr':jobr})
    return render(request, 'interface/job_removed.html', {'job':job, 'jobdetail':jobdetail})

Вывод моей powershell для этих команд печати:

enter image description here

В базе данных (SQLite):

enter image description here

Я пытаюсь скопировать запись из таблицы Job в таблицу Job Removed. Я присваиваю новой записи в Job Removed значения из таблицы Job. Это правильно печатается в powershell, но когда я проверяю свою базу данных, ни одно из значений не вводится. Почему это происходит? Может ли кто-нибудь объяснить мне и направить меня в правильном направлении, чтобы исправить это? Я знаю, что есть пост о том, как клонировать данные в другую таблицу, но это не соответствует задаче, которую я должен сделать, поэтому я не использую эти ответы.

Попробуйте удалить атрибут fields из JobRemovedForm или укажите все поля, которые вы хотите сохранить.

Рекомендуемый подход - использовать встроенные в Django CreateView классы, чтобы с помощью нескольких строк кода вы могли добиться того же самого.

На самом деле вам не нужна модель Job_removed, потому что она не используется и не является лучшим дизайном для такого случая в целом. Поэтому сначала удалите эту модель и добавьте поле is_deleted к вашей модели задания, значение которого должно быть True для удаленных заданий и False для не удаленных заданий. По умолчанию я делаю is_deleted равным False, так что когда вы удалили задание, вы можете отметить его как True

class Job(models.Model):

    jobname = models.CharField(max_length = 1000)
    owner = models.CharField(max_length = 150)
    enabled = models.BooleanField()
    freq_type = models.IntegerField(default = 1)
    freq_interval = models.IntegerField(default = 0)
    freq_recurrence = models.IntegerField(default = 0)
    start_date=models.CharField(max_length=10)
    end_date=models.CharField(max_length=10, blank = True)
    start_time=models.CharField(max_length=6)
    end_time=models.CharField(max_length=6, blank = True)
    date_added = models.DateTimeField(auto_now_add = True, null = True)
    date_modified=models.DateTimeField(auto_now = True, null = True)
    version=models.IntegerField(default = 1)
    is_delete = models.BooleanField(default=False) # new field
  1. Удалите вашу модель удалить Job_removed 2)запустите python manage.py makemigrations 3)запустить python manage.py migrate

Теперь давайте поработаем над вашими представлениями для удаления заданий.

from django.shortcuts import render,get_object_or_404,redirect
def job_delete(request,pk):
    job= get_object_or_404(Job,pk=pk,is_deleted=False)
    job.is_deleted = True # delete the job if it is not deleted 
    job.save()
    return redirect('/job/')

Примечание:Я использую get_object_or_404, чтобы поднять страницу не найдена, если нет работы, связанной с пк, и я проверяю, что работа не удалена.

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

Job.objects.filter(is_deleted = False)

вместо

Job.objects.all()

и лучше использовать метод post для удаления заданий, а не get.but for now you can keep as it is.
sorry for my english if you do not understand please ask me in the comments.
. Update
Но если вы хотите сделать так, как вы сделали. то вам не нужна форма, вы можете просто скопировать данные из Job в Job_removed.и если вам нужна форма, вы можете сделать эти поля только для чтения.
. давайте сделаем это без формы

from django.shortcuts import render,get_object_or_404,redirect
def job_delete(request,pk):
    job= get_object_or_404(Job,pk=pk)
    jr = Job_removed()
    jr.jobname = job.jobname
    print(jr.jobname)
    jr.owner = job.owner
    print(jr.owner)
    jr.enabled = job.enabled
    print(jr.enabled)
    jr.start_date = job.start_date
    print(jr.start_date)
    jr.start_time = job.start_time
    print(jr.start_time)
    jr.date_added = job.date_added
    print(jr.date_added)
    jr.version = job.version
    print(jr.version)
    jr.save()
    job.delete() # then delete the job
    return redirect('/job/')
Вернуться на верх