2017-10-27 1 views
0

Ich weiß, dass diese Frage schon einmal gestellt wurde, aber ich habe die Antworten durchgelesen, und keine von ihnen hat genügt. Ich versuche, eine Stelle auf der Jobbörse zu schaffen, auf der sich ein Arbeitgeber anmelden und Stellen aufgeben kann. So gibt es ein Employer Objekt und jeder Arbeitgeber kann so viele Job s wie sie wollen. Ich bin mir nicht sicher, wie ein Formular erstellt werden soll, in dem eine bestimmte Modellinstanz bearbeitet werden kann.Formular zum Bearbeiten bestimmter Instanz des Modells

Das Modell Job:

poster = models.ForeignKey(Employer, on_delete=models.CASCADE) 
    job_title = models.CharField(max_length=50) 
    establishment_name = models.CharField(max_length = 50) 
    details = models.TextField(max_length = 2000) 
    salary = models.CharField(max_length = 20) 
    address = models.CharField(max_length = 50) 
    city = models.CharField(max_length = 50) 

    state_choices = (
     #long list omitted on purpose 
) 
    state = models.CharField(choices=state_choices, max_length = 20) 
    zip_code = models.CharField(max_length = 10) 


    def __str__(self): 
     return self.job_title + " - " + self.establishment_name \ 
       + ", " + self.poster.user.first_name + " " +self.poster.user.last_name 

ich eine Form haben Jobs schreiben:

class JobPostForm(ModelForm): 
    class Meta: 
     model = Job 
     fields= ('job_title', 
       'establishment_name', 
       'details', 
       'address', 
       'city', 
       'state', 
       'zip_code', 
       ) 

eine Ansicht Jobs schreiben:

if request.method == 'POST': 
    form = JobPostForm(request.POST) 
    if form.is_valid(): 
     job_object = form.save(commit=False) 
     job_object.poster = request.user.employer 
     job_object.save() 
     return redirect('employer_home') 


else: 
    form = JobPostForm() 

und eine Vorlage Jobs zu schreiben:

<form method="post" class=""> 
    {% csrf_token %} 
    {{ form.as_p}} 
    <button type="submit">Post Job</button> 
</form> 

aber ich bin mir nicht sicher, wie ich etwas erstellen kann, das einen Jobbeitrag bearbeiten kann. Ich habe Beispiele mit UpdateView() gesehen, aber das konnte nicht funktionieren. Weiß jemand, wie man dies für diese bestimmte Instanz zum Laufen bringt?

+1

Mit 'UpdateView' sollte genauso einfach sein wie die Formularklasse angeben, die Sie zu aktualisieren verwenden, und sicherzustellen, dass' pk' Teil der URL des kwargs ist. Wenn Sie den pk nicht in der URL haben möchten, können Sie 'get_object' in der View-Klasse überschreiben, um das Objekt mit den für Ihre Anwendung erforderlichen Mitteln zu erhalten. – dannosaur

Antwort

0

Mit UpdateWiew

from django.views.generic import UpdateView 
class JobUpdateView(UpdateView) 
    model = Job 
    form_class = JobPostForm 
    template_name = "Jobform.html" 

    def get_object(self, *args, **kwargs): 
     job = get_object_or_404(Job, pk=self.kwargs['pk']) 
     return job 

    def get_success_url(self, *args, **kwargs): 
     return reverse("ulr_name_to_redirect_after_success") 
Verwandte Themen