Ich versuche Verwendung Django integrierte Klasse UpdateView
ein Bild Modellreverse() bekam ein unerwartetes Stichwort Argument 'pk_url_kwarg' - UpdateView
Das Modell zu aktualisieren ist:
def get_image_path(instance, filename):
return '/'.join(['studyoffer_images', instance.study_offer.slug, filename])
class UploadStudyOffer(models.Model):
study_offer = models.ForeignKey(StudiesOffert, related_name='uploadsstudyoffer')
image = models.ImageField(upload_to=get_image_path, verbose_name='Seleccionar imagen')
# images folder per object
featured = models.BooleanField(default=False, verbose_name='Destacada',
help_text='Indica si la imagen aparecera en el carrusel')
thumbnail = models.BooleanField(default=False)
active = models.BooleanField(default=True, verbose_name='Activa',
help_text='Indica si una imagen de oferta esta habilitada o disponible')
objects = UploadStudyOfferManager()
def __str__(self):
return self.study_offer.ad_title
Die Form dieses Modell:
class StudyOfferImagesUploadForm(forms.ModelForm):
class Meta:
model = UploadStudyOffer
fields = ('image', 'active', 'featured')
Was ich will, ist jetzt der Benutzer zu ermöglichen, ein Bild zu bearbeiten und kann den Status Bild ändern und ändern (featured
, active
, thumbnail
)
Dann baue ich meine StudyOfferImageUpdateView
das Bild zu aktualisieren Attribute:
class StudyOfferImageUpdateView(SuccessMessageMixin, UserProfileDataMixin, LoginRequiredMixin, UpdateView):
model = UploadStudyOffer
form_class = StudyOfferImagesUploadForm
success_url = reverse_lazy("host:edit-study-offer-image", pk_url_kwarg='pk')
success_message = "Imagen actualizada"
def get_context_data(self, **kwargs):
context = super(StudyOfferImageUpdateView, self).get_context_data(**kwargs)
user = self.request.user
return context
def get_object(self):
return get_object_or_404(UploadStudyOffer, pk=self.kwargs.get('pk'))
Die URL dieser Ansicht zuzugreifen, ist:
url(r"^study-offer/edit/images/(?P<pk>\d+)/$",
StudyOfferImageUpdateView.as_view(),
name='edit-study-offer-image'
),
Wenn ich mein Bild bearbeiten möchten, die Vorlage dies:
Diese Vorlage wird richtig dargestellt, aber wh en ich den Update
Submit-Button drücken, bekomme ich diesen Fehler:
Exception Type: TypeError at /host/study-offer/edit/images/47/
Exception Value: reverse() got an unexpected keyword argument 'pk_url_kwarg'
Dieser Fehler existiert, weil in meinem StudyOfferImageUpdateView
Django nicht akzeptieren, die success_url = reverse_lazy("host:edit-study-offer-image", pk_url_kwarg='pk')
ich den pk_url_kwarg='pk'
Satz in meinem StudyOfferImageUpdateView
q=pk_url_kwarg='pk'
print(q)
Und der Ausgang, wenn ich über den Browser zu meinem StudyOfferImageUpdateView
eingeben ist:
# pk string, is not the pk value
pk
System check identified no issues (0 silenced).
October 24, 2017 - 15:58:55
Django version 1.10.7, using settings 'hostayni.settings.development'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
[24/Oct/2017 15:58:57] "GET /host/study-offer/edit/images/47/ HTTP/1.1" 200 8559
Ich weiß, dass in der get_context_data()
Methode der pk_url_kwarg='pk'
Satz es funktioniert ist, ich es in der success_url = reverse_lazy("host:edit-study-offer-image", pk_url_kwarg='pk')
bin vorbei und eine Zeichenfolge pk
und für tis Grund ankommen mein Workflow breaked. Wie kann ich den richtigen Parameter in meinem success_url = reverse_lazy("host:edit-study-offer-image", pk_url_kwarg='pk')
übergeben, der ein pk
Bild erwartet?
Sie sind die besten django Entwickler ich je gesehen habe Sie alle Fragen beantworten: 0, kann man mich lehren:) –
Richtig, ich war verwirrt über der Schlüsselwort zu verwenden. In der [Classy Class-Based Views-UpdateView] (https://ccbv.co.uk/projects/Django/1.11/django.views.generic.edit/UpdateView/) habe ich mir die 'pk_url_kwarg = 'pk' angesehen Attribut, aber ich verweise nicht auf einen korrekten Weg. Tahnks viel für dich. Mit freundlichen Grüßen D – bgarcial
Die 'pk_url_kwarg'-Option bietet Ihnen mehr Flexibilität bei der Verwendung von klassenbasierten Ansichten, aber die zusätzliche Ebene der Indirektion macht es komplizierter. In diesem Fall würde ich es wahrscheinlich zu 'kwargs = {'pk': self.kwargs ['pk']}' vereinfachen. – Alasdair