我有一个网站,目录本地徒步旅行。用户可以“记录”他们已经完成了这些远足。我有这两个模型+形式的预期工作。不过,现在,为了记录一次远足,您必须从一个包含数据库中所有远足的长列表中选择远足。我希望能够预先填充该字段,以便如果您来自有问题的远足的详细信息页面,那么该字段将填充远足
下面是一些代码:
型号.py:
model Hike(models.Model):
name = CharField(max_length=255)
slug = models.SlugField(unique=True)
...other fields...
model UserLog(models.Model):
hike = models.ForeignKey(Hike, on_delete=models.CASCADE)
user = models.ForeignKey(User, on_delete=models.CASCADE)
表单.py:
class LogHike(forms.ModelForm):
class Meta:
model = UserLog
fields = ('hike', 'date', ... other fields)
视图.py:
def hike_detail(request, slug):
hike = Hike.objects.get(slug=slug)
log = UserLog.objects.filter(hike__slug=slug)
... more stuff here ...
return render(request, 'hikes/hike_detail.html' {
'hike': hike,
'log': log,
})
def log_hike(request):
if request.method == "POST":
form = LogHike(request.POST)
if form.is_valid():
obj = form.save(commit=False)
userid = request.user
obj.user = request.user
obj.save()
return redirect('user_profile', uid=userid.id)
else:
form = LogHike()
return render(request, 'log_hike.html', {'form': form})
因此,如果用户正在查看“hike\u detail”视图,我希望有一个链接可以将他们发送到“log\u hike”视图,但是“hike”字段是根据他们来自的“hike”预先填充的。我想可能和实例函数有关吧?但我没有太多的经验。有没有一种简单的方法从引用页面传递数据,以便预先填充表单
当
request.method
是get
时,可以在log_hike
中预填充该表单,方法与在post
中时相同另一件事是形式,你将采取
hike_id
。但这可以来自request.GET
例如您可能希望重写
ModelForm
__init__
方法:现在您所需要的只是另一个视图,它接受传递的参数,然后您就可以进行设置了。为此扩展
urls.py
,然后执行以下操作:未经测试的代码,您可能必须对其进行调整,我来自基于类的视图,因此对您来说可能会有所不同
相关问题 更多 >
编程相关推荐