首先,英语不是我的第一语言,Django也不是
假设我有一个模型“城市”,它与一个“省”有父键/外键关系(每个省可以有多个城市)
models.py:
class Province(models.Model):
name = models.CharField(max_length=75, help_text="What province are you adding?", unique=True, default="")
slug = models.SlugField(max_length=100, blank=True)
class City(models.Model):
province = models.ForeignKey(Province, on_delete=models.CASCADE) #Each city belongs to one province
slug = models.SlugField(max_length=100, blank=True)
可以通过CreateView将城市添加到省
My related views.py如下所示:
class AddCityView(CreateView):
model = City
form_class = CityForm
def get_success_url(self):
return reverse('app:provincedetail', kwargs={'slug' : self.object.province.slug})
相关的url.py如下所示:
urlpatterns = [
path('<slug:slug>/', views.ProvinceDetailView.as_view(), name='provincedetail'), #shows province information in more detail
path('<slug:province>/add/', views.AddCityView.as_view(), name='addcity'), #add a city to a province
]
因此,当用户转到“省详细信息”视图时,他们可以很容易地通过表单从那里添加一个城市。我认为在这个表单中为省设置一个字段是多余的,它应该在用户提交城市表单时自动生成。在我看来,这将通过url完成,因为省slug已经在其中。最好的方法是什么
我的想法是在提交表单后通过覆盖CreateView的form_valid函数来更改字段值,如下所示:
def form_valid(self, form):
self.object = form.save()
self.province = #but then how would I pass the slug in the url to this? How do I even get the url in a CreateView function?
return super().form_valid(form)
但是,我不确定如何在views.py中获取当前url数据并将相关部分(slug)传递给self.province。我该怎么做?我知道您可以在模板视图中使用{{request.path},但我认为这在这里不适用
任何帮助都是值得的,谢谢
首先,您应该使slug唯一,然后在您的视图中,您可以通过
self.kwargs
访问slug:相关问题 更多 >
编程相关推荐