Страница редактирования модели Django создает новую модель вместо редактирования текущей - PullRequest
0 голосов
/ 09 июля 2019

Я только что развернул свое первое приложение Django, предназначенное для небольшой компании, в которой я работаю, чтобы отслеживать рабочие места, расходы, и у него есть блог, чтобы клиенты могли его увидеть.После того, как я развернул сайт, я понял, что страница для редактирования модели задания не отображает информацию о задании, а представляет собой пустую форму для нового экземпляра.Когда редактирование отправлено, оно создает новый экземпляр вместо изменения текущего задания, которое должно быть отредактировано.Редактирование прекрасно работает через панель администратора, но я просто не могу понять, почему страница редактирования не работает.

Я попытался настроить функцию просмотра для редактирования задания, удаления миграций и базы данных, иповторная миграция, все безрезультатно.

views.py

def job_edit(request, pk):
    if request.user.is_authenticated:
        job = get_object_or_404(Job, pk=pk)
        if request.method == "POST":
            form = JobForm(request.POST, request.FILES)
            if form.is_valid():
                job = form.save(commit=False)
                job.author = request.user
                job.last_updated = timezone.now()
                job.image0 = form.cleaned_data['image0']
                job.image1 = form.cleaned_data['image1']
                job.image2 = form.cleaned_data['image2']
                job.image3 = form.cleaned_data['image3']
                job.save()
                messages.success(request, 'Job updated successfully')
                return redirect('job_detail', pk=job.pk)
        else:
            form = JobForm()
        return render(request, 'job_edit.html', {'form': form})
    else:
        return render(request, 'job_edit.html')

forms.py

class JobForm(forms.ModelForm):
    foreman = forms.ChoiceField(choices=FOREMEN, required=True)
    status = forms.ChoiceField(choices=JOB_STATUS, required=True)
    zip = forms.IntegerField(validators=[MinValueValidator(00000), MaxValueValidator(99999)])
    class Meta:
        model = Job
        fields = ('title', 'foreman', 'crew_size', 'status', 'text', 'truck', 'trailer', 'service', 'client_name', 'client_phone', 'client_email', 'client_source', 'estimated_days', 'schedule_date', 'address', 'town', 'state', 'zip', 'image0', 'image1', 'image2', 'image3')

1 Ответ

2 голосов
/ 09 июля 2019

Если вы используете ModelForm для редактирования существующей записи, вы должны передать существующую запись в форму.

# When rendering the form on a GET
# This will populate the form with the jobs current data
form = JobForm(instance=job)

# When the form has been submitted
form = JobForm(request.POST, request.FILES, instance=job)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...