Не удалось сохранить в базе данных 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 для этих команд печати:
В базе данных (SQLite):
Я пытаюсь скопировать запись из таблицы 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
- Удалите вашу модель удалить 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/')