django - 如何设置 success_url 以重定向回与 UpdateView 中引用的模型不同的模型?
问题描述
# models.py
class Address(models.Model):
address = models.TextField()
class Doctor(models.Model):
locations = models.ManyToManyField(Address)
class Patient(models.Model):
locations = models.ManyToManyField(Address)
# views.py
class PatientDetailView(DetailView):
model = Patient
class DoctorDetailView(DetailView):
model = Doctor
class DoctorUpdateView(UpdateView):
model = Doctor
fields = ['locations']
class AddressUpdateView(UpdateView):
model = Address
fields = ['address']
我希望能够从 DoctorDetaillView 或 PatientDetailView 转到 AddressUpdateView,然后根据我所在的视图返回 DDV 或 PDV。
我可以使用以下命令从 DDV/PDV 路由到 AddressUpdateView:
# detailview1
{% for address in object.address.all %}
<a href="{% url 'address-update' address.id %}">Update Address</a>
{% endfor %}
我试过了
# detailview1
<a href="{% url 'address_update' adress.id %}?next={% url 'doctor_detail' object.id %}">Update Address</a>
但是这个 url 查询参数本身不起作用。它只是不会让我回到医生详细信息网址。
我知道我需要以某种方式添加success_url、reverse 或其他内容,但我就是想不通。我不能明确地将 get_success_url 返回给 Doctor,因为如果它是针对患者的地址更新,我不希望它返回 DoctorView,反之亦然。
有谁知道我如何从 AddressUpdateView 返回 Doctor 或 Patient detailview 并正确地将其反转回各自的视图?
解决方案
我认为你可以做的是get_context_data
在你的视图中添加一个函数。就像是:
class AddressUpdateView(UpdateView):
model = Address
fields = ['address']
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) # [1]
context['doctor'] = Doctor.objects.all() # [2]
return context
这只是将额外的上下文呈现到您的模板中。请记住,此功能需要[1]
运行,因此即使您不使用它也不要删除它。对于[2]
,您可以实现要应用的任何过滤器以获取适当的医生对象。
那么你可以这样做(假设 Doctor 对象也有一个 ID)
<a href="{% url 'address_update' adress.id %}?next={% url 'doctor_detail' doctor.id %}"></a>
推荐阅读
- r - 用 ggmap 绘制多边形数据
- javascript - 使用Javascript防止asp.net mvc 5站点中的页面更改
- python - sqlalchemy 给出'/usr/local/lib/libtdsodbc.so':找不到文件
- jaxb - jaxb 绑定:命名空间(scd)的包不起作用
- python - 在 try/except 块中连接数据帧
- javascript - 如何确保在文件系统终止写入流之后出现 Express 响应?
- python - 如何按顺序循环/解析表行而不跳到变量的下一个实例?
- java - 已解决:选择方式链接文本不工作尝试了一切
- javascript - 何时在构造函数(道具)上使用普通状态?
- asp.net-mvc - Azure 是否曾经在应用服务中缓存旧版本的视图?