Как я могу получить pk из клонированного экземпляра модели в form_valid для использования в get_success_url в UpdateView? - PullRequest
0 голосов
/ 01 апреля 2020
class DomainRegistrationItemUpdateView(UpdateView):
    model = DomainRegistrationItem
    form_class = DomainAddYearsForm
    template_name = "add_years.html"

    def get_context_data(self, *args, **kwargs):
        context = super(DomainRegistrationItemUpdateView,
                        self).get_context_data(**kwargs)
        # tld_ppy Top Level Domain Price Per Year
        context['tld_ppy'] = TLD.objects.get(
            name='.%s' % (self.kwargs['domain_name'].split('.')[1])).yearly_price
        return context

    def get_object(self, queryset=None):
        return DomainRegistrationItem.objects.get(domain=self.kwargs['domain_name'], purchased=True)

    def get_success_url(self):
        split_dn = self.kwargs['domain_name'].split('.')
        namespace = split_dn[0]
        sld = split_dn[1]
        return reverse("domain_registraiton_item_detail", kwargs={
            "pk": self.kwargs['pk'],
            'namespace': namespace,
            'second_level_domain': sld})

    def form_valid(self, form):

        f = form.save(commit=False)

        working_dri = DomainRegistrationItem.objects.get(domain=self.kwargs['domain_name'])
        working_dri.pk = None
        working_dri.save()
        working_dri.purchased = False
        working_dri.years = f.years
        f.save()
        return super(DomainRegistrationItemUpdateView, self).form_valid(form)

Код working_dri - это код, который клонирует DomainRegistrationItem, рассматриваемый представлением.

Я хочу получить pk от working_dri для использования в get_success_url. Как я могу это сделать? Заранее благодарим за любую помощь.

1 Ответ

0 голосов
/ 01 апреля 2020

UpdateView сохраняет объект, который он сохраняет, в self.object, как мы видим в исходном коде :

    def form_valid(self, form):
        """If the form is valid, save the associated model."""
        <b>self.object</b> = form.save()
        return super().form_valid(form)

, поэтому мы можем использовать:

class DomainRegistrationItemUpdateView(UpdateView):
    model = DomainRegistrationItem
    form_class = DomainAddYearsForm
    template_name = "add_years.html"

    # &hellip;

    def get_success_url(self):
        split_dn = self.kwargs['domain_name'].split('.')
        namespace = split_dn[0]
        sld = split_dn[1]
        return reverse("domain_registraiton_item_detail", kwargs={
            "pk": <b>self.object.pk</b>,
            'namespace': namespace,
            'second_level_domain': sld})

    def form_valid(self, form):
        <b>form.instance.pk = None</b>
        form.instance.purchased = False
        form.instance.years = f.years
        return super(DomainRegistrationItemUpdateView, self).form_valid(form)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...