我是Django的新手,在一个页面中,我有一个组合框,由数据库中的字段填充(简单的城市名称)。我从数据库中选择一个对象,并将参数传递给url。我知道这不是最干净的方法,还有更好的方法。
有没有更好的方法来填充组合框而不向url传递数据库参数?一种更简洁的方法,然后以不同的更好的方式传递参数。我的代码如何采用不同的方法?谢谢你
models.py
from django.db import models
class City(models.Model):
name = models.CharField(max_length=30)
def __str__(self):
return self.name
forms.py
from .models import City
class SelectCityForm(forms.Form):
city = forms.ModelChoiceField(queryset=City.objects.all())
class Meta:
model = City
fields = ('name')
views.py
def city_detail(request):
form = CitySelectForm()
object = None
if request.method == "POST":
form = CitySelectForm(request.POST)
if form.is_valid():
city_id = form.cleaned_data['city']
object = City.objects.get(id=city_id)
context = {'form': form, 'object': object}
return render(request, 'app1/home.html', context)
首页.html
<form action="/url-to-city_detail-view/" method="post">
{% csrf_token %}
{{ form }}
<input type="submit" value="Submit">
</form>
url.py
from django.urls import path, include
from . import views
from app1.views import index
from app1 import views
urlpatterns = [
path('', index, name='index'), #Aggiunto per combobox
path('login/', views.sign_in, name='login'),
path('logout/', views.sign_out, name='logout'),
path('home/', views.home, views.city_detail, name='home'),
]
1条答案
按热度按时间kninwzqo1#
现在你不传递参数到URL。您正在传递参数,因此POST请求标头。这意味着,在您当前的设置中,当您在表单中选择“New York”并提交时,您只能仅访问城市“纽约”的详细视图,对吗?
传递参数到url意味着每个城市都有自己的详细信息站点。这意味着您可以通过“www.example.com”访问城市“纽约”www.your-website.com/new-york/detail,通过“www.example.com”访问“柏林”www.your-website.com/berlin/detail。这允许您在用户知道URL的情况下不强制用户使用表单。这也允许您动态链接到这些城市的详细视图。
它从您的www.example.com开始urls.py
然后调整城市的细节视图
所以超级酷的优势是,现在你不必使用的形式,因为你也可以只使用一个直接链接到城市!
对于进一步的阅读,我建议使用django教程中的this part。这是Django的第一步。