0

I have a CustomUser model and a partner model and a student model both having OneToOne relatioship to CustomUser as below:

class CustomUser(AbstractUser):
    username = None
    email = EmailField(verbose_name='email address', max_length=255, unique=True, )
    first_name = CharField(verbose_name='First Name', max_length=30, null=True, )
    middle_name = CharField(verbose_name='Middle Name', max_length=30, null=True, blank=True, )
    last_name = CharField(verbose_name='Last Name', max_length=30, null=True, )
    phone_number = CharField(verbose_name='Phone Number', max_length=30, null=True, )
    is_partner = BooleanField(default=False, )
    is_student = BooleanField(default=False, )

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    objects = CustomUserManager()

    def __str__(self):
        return self.email


class Partner(Model):

    user = OneToOneField(CustomUser, on_delete=CASCADE, related_name="partner")


class Student(Model):

    user = OneToOneField(CustomUser, on_delete=CASCADE, related_name='student')

I have a view in which I want to update first_name, last_name, middle_name, and phone_number of the user. This is a simple update view. But I want to put two submit buttons, in edge case, both of which might be available in the page:


<form method="post" novalidate>
    {% csrf_token %}
    {% include 'includes/accounts/user_name_and_phone_update_view_form.html' with form=form %}

    {% if user.is_student %}
        <button type="submit" name="student" id="student">Continue to Student Profile</button>
    {% endif %}

    {% if user.is_partner %}
        <button type="submit" name="partner" id="partner">Continue to Partner Profile</button>
    {% endif %}
</form>

I need to customize my view as below(this is pseduo code):

@method_decorator([login_required, ], name='dispatch')
class UserNameAndPhoneUpdateView(UpdateView):
    model = CustomUser
    fields = ('first_name', 'middle_name', 'last_name', 'phone_number',)
    template_name = 'accounts/account.html'

    if submit button id and name is student:
        success_url = reverse_lazy('student_general_information')
    elif submit button id and name is partner:
        success_url = reverse_lazy('partner', kwargs={'partner_pk': self.request.user.partner.pk})


    def get_object(self):
        return self.request.user

How can I right the if part and how can pass part_pk to reverse_lazy in elif?

Amin Ba
  • 1,603
  • 1
  • 13
  • 38

1 Answers1

0

It worked this way:

@method_decorator([login_required, ], name='dispatch')
class UserNameAndPhoneUpdateView(UpdateView):
    model = CustomUser
    fields = ('first_name', 'middle_name', 'last_name', 'phone_number',)
    template_name = 'accounts/account.html'

    def get_success_url(self):
        if "student" in self.request.POST:
            return reverse_lazy('student_general_information')
        elif "partner" in self.request.POST:
            return reverse_lazy('partner', kwargs={'partner_pk': self.request.user.partner.pk})

        return super(UserNameAndPhoneUpdateView, self).get_success_url()

    def get_object(self):
        return self.request.user

based on: https://stackoverflow.com/a/2011023/11065874

Amin Ba
  • 1,603
  • 1
  • 13
  • 38