如何基于Django模板中的不同提交按钮在更新视图中具有自定义成功url?

问题描述 投票:0回答:1

我有一个CustomUser模型,一个伙伴模型和一个学生模型,它们都与CustomUser具有OneToOne关系,如下所示:

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

我有一个想要更新用户的名字,姓氏,中间名和电话号码的视图。这是一个简单的更新视图。但是我想在边缘添加两个提交按钮,这两个按钮可能在页面中都可用:


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

我需要按以下方式自定义我的视图(这是pseduo代码:

@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部分,如何在elif中将part_pk传递给reverse_lazy?

django templates view model
1个回答
0
投票

可能您可以放一个按钮提交并有2个文本,如下所示:

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

并且您可以覆盖get_success_urlget_success_url方法:

UpdateView
© www.soinside.com 2019 - 2024. All rights reserved.