Python 在django表单中成功提交表单后,如何将address.pk作为参数传递?
我在Django项目中创建了一个地址表单,并在views.py中创建了一个AddressDetailView。当用户成功提交地址表单时,我希望通过传递address.pk作为参数,将用户重定向到address_details.html。但我不知道如何传递那个参数。我不断得到一个错误,如图所示,我不知道如何修复它 这是地址模型的models.pyPython 在django表单中成功提交表单后,如何将address.pk作为参数传递?,python,django,django-models,django-views,django-forms,Python,Django,Django Models,Django Views,Django Forms,我在Django项目中创建了一个地址表单,并在views.py中创建了一个AddressDetailView。当用户成功提交地址表单时,我希望通过传递address.pk作为参数,将用户重定向到address_details.html。但我不知道如何传递那个参数。我不断得到一个错误,如图所示,我不知道如何修复它 这是地址模型的models.py route_name = models.ForeignKey(Route, on_delete=models.CASCADE) name
route_name = models.ForeignKey(Route, on_delete=models.CASCADE)
name = models.CharField(max_length=30)
city = models.ForeignKey(City, on_delete=models.SET_NULL, blank=True, null=True)
area = models.ForeignKey(Area, on_delete=models.SET_NULL, blank=True, null=True)
location = models.CharField(max_length=30, choices=LOCATION_CHOICES, default='NULL')
username = models.ForeignKey(settings.AUTH_USER_MODEL, default=1, on_delete=models.CASCADE)
make_initial_location = models.BooleanField()
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('address-detail', kwargs={'pk': self.pk})
这是forms.py中的地址表单:
class Meta:
model = Address
fields = ['route_name','name', 'city','area','location','make_initial_location']
def form_valid(self, form):
form.instance.username = self.request.user
return super().form_valid(form)
这是views.py中的地址创建视图,我在这里编写了重定向到地址详细信息的代码,它告诉我错误在返回重定向(“地址详细信息”):
@login_required
def AddressCreateVeiw(request):
form = AddressCreationForm()
if request.method == 'POST':
form = AddressCreationForm(request.POST)
if form.is_valid():
form.save()
messages.success(request, f'Your address has been successfully created!')
return redirect('address-detail')
return render(request, 'blog/address_form.html', {'form': form})
这是地址表单和地址详细信息HTML页面的URL路径:
path('address/<int:pk>/', AddressDetailView.as_view(), name='address-detail'),
path('address/new/', views.AddressCreateVeiw, name='address-create')
]
path('address/',AddressDetailView.as_view(),name='address-detail'),
路径('address/new/',views.AddressCreateVeiw,name='address-create')
]
地址表单html页面:
{% csrf_token %}
<legend class="border-bottom mb-4">Registration Page</legend>
{{ form|crispy }}
<button class="button" type="submit"> Register</button>
</form>```
this is the address_detail.html page:
``` <article class="media content-section">
<div class="media-body">
<div class="article-metadata">
<legend class="border-bottom mb-4"> Details of <b>{{ object.name }} </b> address</legend>
<a class="mr-2" href="{% url 'route-addresses' address.route_name %}">Route: {{ object.route_name }} </a>
<br>
<small class="text-muted">Click on the route to see all addresses added to it. </small>
</div>
<p><b>City:</b> {{ object.city }}</p>
<p><b>Area: </b> {{ object.area }}</p>
<p><b>Location: </b> {{ object.location }}</p>
<p class="text-muted">Is Initial Location: {{object.make_initial_location}}</p>
{% if object.username == user %}
<div>
<a class="btn btn-secondary btn-sm mt-1 mb-1" href="{% url 'address-update' object.id %}"> Update</a>
<a class="btn btn-danger btn-sm mt-1 mb-1" href="{% url 'address-delete' object.id %}">Delete</a>
</div>
{% endif %}
</div>
</article>
{%csrf\u令牌%}
注册页
{{form | crispy}}
登记
```
这是地址_detail.html页面:
```
单击路由以查看添加到路由的所有地址。
城市:{{object.City}
区域:{{object.Area}}
位置:{{object.Location}
是初始位置:{{object.make_Initial_Location}
{%if object.username==user%}
{%endif%}
提交地址表后,出现以下错误:
您需要为
pk
URL参数添加一个参数:
@login_required
def AddressCreateVeiw(request):
form = AddressCreationForm()
if request.method == 'POST':
form = AddressCreationForm(request.POST, request.FILES)
if form.is_valid():
form.instance.username = request.user
instance = form.save()
messages.success(request, f'Your address has been successfully created!')
return redirect('address-detail', pk=instance.pk)
return render(request, 'blog/address_form.html', {'form': form})
form\u valid
不是form
的方法,但是对于带有FormMixin
的视图
,表单中也没有self.request
,因为表单不知道请求。
@login_required
def AddressCreateVeiw(request):
form = AddressCreationForm()
if request.method == 'POST':
form = AddressCreationForm(request.POST, request.FILES)
if form.is_valid():
form.instance.username = request.user
instance = form.save()
messages.success(request, f'Your address has been successfully created!')
return redirect(instance)
return render(request, 'blog/address_form.html', {'form': form})