Django-get_absolute_url如何工作?

时间:2018-07-18 21:35:22

标签: python django django-models django-forms

我的网页如下所示:

enter image description here

当我按下“提交”按钮时,页面被“重定向”到其他页面。如果我未在get_absolute_url中指定models.py方法,则会收到ImproperlyConfigured错误。如果我在models.py中设置了重定向到的位置,则单击“提交”按钮后,它将定向到该页面。我不明白的是,仅“提交”按钮如何重定向到我在models.py上设置的任何链接?为什么单击侧栏上的链接不能重定向到它?

为什么get_absolute_url方法仅在单击“提交”按钮时起作用,而在其他按钮上却不起作用?

practice_add_well.html

<!DOCTYPE html>
{% extends "base.html" %}
  {% block content %}

    <h1>Test Page for BHA</h1>

    <form method="POST">
      {% csrf_token %}
      {{ form.as_p }}
      <input type="submit" class='btn btn-primary' value="Submit">
    </form>

  {% endblock %}

models.py

from django.db import models
from django.urls import reverse

class WellInfo(models.Model):
    name = models.CharField(max_length=100)
    region_location = models.CharField(max_length=100)
    spud_date = models.CharField(max_length=100)
    well_bore = models.CharField(max_length=100)
    rig_name = models.CharField(max_length=100)
    status = models.CharField(max_length=100)

    def get_absolute_url(self):
        return reverse(# some link....)

views.py

from django.shortcuts import render
from django.views.generic import View, TemplateView, ListView, DetailView, CreateView, UpdateView, DeleteView

from . import models

class WellInfoCreateView(CreateView):
    template_name = 'practice_add_well.html'
    context_object_name = 'bha_inputs'
    model = models.WellInfo
    fields = '__all__'

2 个答案:

答案 0 :(得分:1)

默认情况下,CreateView类从success_url继承FormMixin属性,它将从模型获取url

class WellInfoCreateView(CreateView):
    template_name = 'practice_add_well.html'
    context_object_name = 'bha_inputs'
    model = models.WellInfo
    fields = '__all__'
    success_url = 'url'

有关更多详细信息,请参见class-based-views

答案 1 :(得分:0)

我目前也在学习 Django,并在我自己问这个问题时发现了这个问题。我做了一些进一步阅读,并认为这是您问题的答案:

请注意,在您的视图中,您继承自 CreateView。现在,当此视图运行时,即当您提交表单时,有两种可能性:成功提交或错误。如果是前者,那么您需要知道提交后指向何处。在本例中,它是变量 get_absolute_url,您可以将其设置为您喜欢的任何 url。因此,当您成功提交表单时,您将被带到此 url。 否则,如果您尝试提交表单时出现错误,您将一直停留在表单页面,直到提交成功。

我认为这解释了 get_absolute_url 的作用以及为什么页面上的其他链接不会将您带到此网址。