Ich habe eine App mit Mitarbeiterprofilen und kann für jedes Profil Sicherheitskurse hinzufügen. In der App habe ich ein Formular, das ModelChoiceField verwendet, um ausgewählte Werte aus der Datenbank zu erhalten. In der CreateView funktioniert es gut. Ich kann die Daten eingeben und den Kurs für das Profil auswählen und es der Datenbank hinzufügen. Aber das Problem, das ich habe, ist, wenn ich den Sicherheitskurs für das Profil aktualisiere. Wenn ich das Formular aktualisiere, aktualisiert es das "geleitete_Datum" und das "Ablaufdatum", aber das Auswahlformular wird nicht aktualisiert. Wenn ich das Aktualisierungsformular eintrage, wählt das Formular nicht einmal den Wert aus, den es z. B. hat:Formularfeldwert wird nicht aktualisiert, nachdem der Wert in UpdateView in Django geändert wurde.
Wenn ich ein Profil für "John Doe" habe und ich "course1" zu seinem Profil hinzugefügt habe, funktioniert das gut , aber wenn ich das Profil bearbeite, wird "Kurs1" nicht ausgewählt, sondern "Kurs2" wird ausgewählt. Wenn ich dann einen anderen Kurs wie "course3" wähle und "submit" drücke, wird das "conduced_date" und das "expiration_date" aktualisiert, aber nicht der Kurs. Was genau mache ich falsch oder was vermisse ich?
forms.py
class SafetyCourseTakenForm(forms.ModelForm):
course = forms.ModelChoiceField(queryset=SafetyCourse.objects.all(), empty_label=None)
class Meta:
model = SafetyCoursesTaken
fields = [
'conducted_date',
'expiration_date',
]
views.py
class AddSafetyCourseTakenView(LoginRequiredMixin, SuccessMessageMixin, CreateView):
login_url = reverse_lazy('users:login')
form_class = SafetyCourseTakenForm
template_name = 'ppm/forms/add-course-taken.html'
success_url = reverse_lazy('ppm:manage-courses-taken')
success_message = 'Safety course has been added to profile'
def form_valid(self, form):
course_taken = form.save(commit=False)
course_taken.user = self.request.user
course_taken.profile_id = self.kwargs['pk']
course_taken.course_id = form.data['course']
return super(AddSafetyCourseTakenView, self).form_valid(form)
# override success_url to redirect to url with primary key
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('ppm:manage-courses-taken', kwargs={'pk': pk})
class UpdateSafetyCourseTakenView(LoginRequiredMixin, SuccessMessageMixin, UpdateView):
login_url = reverse_lazy('users:login')
model = SafetyCoursesTaken
form_class = SafetyCourseTakenForm
template_name = 'ppm/forms/update-course-taken.html'
success_url = reverse_lazy('ppm:manage-courses-taken')
success_message = 'Safety course has been updated for profile'
def get_success_url(self):
profile = SafetyCoursesTaken.objects.get(id=self.kwargs['pk'])
return reverse('ppm:manage-courses-taken', kwargs={'pk': profile.profile_id})
Ich habe auch versucht init in meinem forms.py Einstellung aber, dass entweder nicht funktioniert hat.
SafetyCourseTakenForm(forms.ModelForm):
...
...
def __init__(self, *args, **kwargs):
super(SafetyCourseTakenForm, self).__init__(*args, **kwargs)
self.fields['course'].queryset = SafetyCourse.objects.all()
So zu wiederholen. Warum aktualisiert mein UpdateView nur die Felder "conduced_date" und "expiration_date", aber nicht das Feld "course" und warum hat das Feld select nicht den richtigen Formularwert im Bearbeitungsformular?
Hinweis: Wenn Sie weitere Informationen benötigen dann, lassen Sie es mich bitte wissen.
Wow, das war einfach, aber ich war in der Nähe, ich versuchte eine Variation davon. Ich habe versucht, "course_id" in der Meta.fields-Liste zu verwenden, aber das hat nicht funktioniert und ich dachte nicht, einfach "Kurs" zu versuchen. Sehr geschätzt. Da funktioniert dann, dass auch "course_taken.course_id = form.data ['natürlich']" redundant in meiner AddSafetyCourseTakenView macht. – nastyn8