首页 > 解决方案 > django:url更改取决于模型存在

问题描述

我想让用户访问页面取决于模型是否存在。我使用 CBV。

我必须控制视图吗?或网址?

FBV 是控制 url 的唯一方法吗?

如何控制用户访问 url?希望帮助我。

我想控制例如:(如您所知,这是无效的语法。希望您知道我在说什么。)

from django.urls import path
from . import views, models

app_name = "papers"


    urlpatterns = [
        path(
            "memberagreement/<int:preassociation_pk>/",
            {% if models.MemberAgreement.association.get(pk=preassociaion_pk) is not NULL %}
                views.member_agreement_detail_vc.as_view(),
            {% else %}
                views.member_agreement_create_vc.as_view(),
            {% endif %}
            name="member_agreement_vc",
        )
    ]

我添加了我的views.py:(它在模型存在时工作,但如果模型不存在,我无法加载我的模板......)

def member_agreement_vc(request, preassociation_pk):
    preassociation = preassociation_models.Preassociation.objects.get(
        pk=preassociation_pk
    )
    try:
        member_agreement = models.MemberAgreement.objects.get(pk=1)
        return render(
            request,
            "papers/member_agreement/detail.html",
            {"member_agreement": member_agreement},
        )
    except models.MemberAgreement.DoesNotExist:
        form_class = forms.CreateMemberAgreementFormVC
        template_name = "papers/member_agreement/create.html"

        def form_valid(self, form):
            pk = self.kwargs.get("preassociation_pk")
            member_agreement = form.save()
            # content
            # association
            # writer
            # participants
            # category
            # is_business
            # is_general

            # number_of_investment_account
            # name
            # resident_registration_number
            # address
            # contact
            member_agreement.writer = self.request.user
            member_agreement.association = preassociation_models.Preassociation.objects.get(
                pk=pk
            )
            member_agreement.category = "member_agreement"
            member_agreement.is_business = True
            member_agreement.is_general = False

            member_agreement.save()
            form.save()
            return redirect(
                reverse(
                    "preassociations:paper",
                    kwargs={"pk": member_agreement.association.pk},
                )
            )

标签: django

解决方案


你问的是什么,我认为是不可能的。URL只是一条路径,或者是一种除了步行之外你什么都不做的方式。就像你是路人一样,你只会走路,然后当你必须决定去哪里时,要么你会要求谷歌这样做,要么是附近的人。所以,道路就像url谷歌地图,就像views你决定去哪里一样。

然后我将尝试使用视图的方式,

// urls.py 

// Add your path

// views.py
from .models import YourModel         // import model

def decideWhereToGo(request):
    modelExist = YourModel.objects.filter(someField=someValue).exists()
    if modelExist:
        // Do sthg
    else:
        // redirect to the url where you want to send if model does not exists

推荐阅读