Python 在django表单中成功提交表单后,如何将address.pk作为参数传递?

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

我在Django项目中创建了一个地址表单,并在views.py中创建了一个AddressDetailView。当用户成功提交地址表单时,我希望通过传递address.pk作为参数,将用户重定向到address_details.html。但我不知道如何传递那个参数。我不断得到一个错误,如图所示,我不知道如何修复它

这是地址模型的models.py

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