Как создать собственный URL успеха в представлении обновлений, основанный на разных кнопках отправки в шаблоне django? - PullRequest
0 голосов
/ 07 октября 2019

У меня есть модель CustomUser, а также модель партнера и модель студента, имеющие отношение OneToOne к CustomUser, как показано ниже:

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')

У меня есть представление, в котором я хочу обновить first_name, last_name, middle_name,и номер телефона пользователя. Это простой вид обновления. Но я хочу поместить две кнопки отправки, в крайнем случае, обе из которых могут быть доступны на странице:


<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>

Мне нужно настроить мой вид, как показано ниже (это псевдо-код):

@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

Как я могу исправить часть if и как передать part_pk в reverse_lazy в elif?

1 Ответ

0 голосов
/ 07 октября 2019

Это сработало так:

@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

на основе: https://stackoverflow.com/a/2011023/11065874

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...