私はローカルハイキングをカタログ化するウェブサイトを持っています。ユーザーは、これらのハイキングを完了したことを「ログ」することができます。私はこれらのモデル+フォームの両方を意図どおりに動作させています。現在、ハイキングを記録するには、データベースのすべてのハイキングを含む長いリストからハイキングを選択する必要があります。そのフィールドにあらかじめ入力して、そのハイキングの詳細ページから来ている場合は、そのフィールドにハイキングを記入してください。ここで参照URLに基づいてModelFormフィールドを事前入力してください
は、いくつかのコードです:
models.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)
forms.py:
class LogHike(forms.ModelForm):
class Meta:
model = UserLog
fields = ('hike', 'date', ... other fields)
views.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_detail」ビューを表示すると、hしたいそれらを "log_hike"ビューに送信するが、そこから来た "Hike"に基づいて "Hike"フィールドがあらかじめ設定されているリンクを使用してください。私はそれがインスタンス関数と何か関係があるかもしれないと思いますか?しかし、私はそれに多くの経験がありません。フォームをあらかじめ入力するために参照ページからデータを渡す簡単な方法はありますか?
これは機能しました!ありがとう!参照リンクをGETフォームとして設定し、そのようにIDを渡す必要がありました。 – Josh