私はDjangoの使用をしようとしていますビルトインクラスUpdateView
画像モデルを更新するためにリバース()予期しないキーワード引数「pk_url_kwarg」を得た - UpdateView
をモデルがある:
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
本の形モデルは次のとおりです。
class StudyOfferImagesUploadForm(forms.ModelForm):
class Meta:
model = UploadStudyOffer
fields = ('image', 'active', 'featured')
私が今欲しいことは、ユーザーが画像を編集することを可能にすることであり、それを変更し、ステータス画像(featured
、を変更することができます0、thumbnail
)
その後、私は画像を更新するために、私のStudyOfferImageUpdateView
を構築属性:
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'))
このビューにアクセスするためのURLは次のとおりです。
url(r"^study-offer/edit/images/(?P<pk>\d+)/$",
StudyOfferImageUpdateView.as_view(),
name='edit-study-offer-image'
),
私は私の画像を編集したい場合は、テンプレートがありますthis:
{% block body_content %}
<h2>Editar imágen</h2>
<form role="form" action="" method="POST" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Update" class="submit-button">
</form>
{% endblock %}
このテンプレートは正しくレンダリングされますが、wh私は私のStudyOfferImageUpdateView
pk_url_kwarg='pk'
文を印刷してみてください
success_url = reverse_lazy("host:edit-study-offer-image", pk_url_kwarg='pk')
を受け入れていないので、私のStudyOfferImageUpdateView
ジャンゴに
Exception Type: TypeError at /host/study-offer/edit/images/47/
Exception Value: reverse() got an unexpected keyword argument 'pk_url_kwarg'
このエラーは、存在します。私はUpdate
送信ボタンを押して途中、私はこのエラーを取得します
q=pk_url_kwarg='pk'
print(q)
ブラウザでStudyOfferImageUpdateView
に入力したときの出力は、
# 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
は、私はそれが作品だpk_url_kwarg='pk'
文get_context_data()
方法では、私はsuccess_url = reverse_lazy("host:edit-study-offer-image", pk_url_kwarg='pk')
にそれを渡していますことを知っていると、文字列pk
に到着し、TISの理由で、私のワークフローがbreakedされます。
pk
イメージが必要なsuccess_url = reverse_lazy("host:edit-study-offer-image", pk_url_kwarg='pk')
に正しいパラメータを渡すにはどうすればよいですか?
あなたは私が今まであなたがすべての質問に答えている見た中で最高のDjangoの開発者である:0、を教えてください。) –
正しい、私は約混乱していました使用するキーワード。 [Classy Class-Based Views-UpdateView](https://ccbv.co.uk/projects/Django/1.11/django.views.generic.edit/UpdateView/)で、私は 'pk_url_kwarg = 'pk''を見ていました私は正しい方法を参照していません。 Tahnksあなたのためにたくさん。よろしくお願いします:D – bgarcial
'pk_url_kwarg'オプションは、クラスベースのビューを使用する際の柔軟性を高めますが、余分なレベルの間接指定はより複雑になります。この場合、おそらく 'kwargs = {'pk':self.kwargs ['pk']}'に単純化します。 – Alasdair