自动将外键字段关联到 pk 对象 django
auto relate a foreign Key Field to a pk object django
我有两个模型:
class Post(models.Model):
title = models.CharField(max_length=200)
class Addimg(models.Model):
post = models.ForeignKey('Post')
image = models.ImageField(upload_to='%Y/%m/%d')
现在我有一个 Addimg 模型的视图,可以将图像附加到 Post:
def addimg(request):
if request.method == "POST":
form = AddimgForm(request.POST, request.FILES)
if form.is_valid():
addimg = form.save(commit=False)
addimg.image = request.FILES['image']
addimg.save()
return redirect('blog.views.list')
else:
form = AddimgForm()
return render(request, 'blog/edit.html', {'form': form})
到目前为止,我表单中的图像字段当然是一个选择字段,我 select 和 Post 我希望我的图像与其相关联。我想要的:我有每个 post 的详细视图,其中有一个按钮 "add image" 我想知道是否可以请求我当前 post 的 pk 并自动关联我的 Addimg此 pk 的模型,其形式中没有字段。有什么建议吗?
一种可能的方法是将 post selection 字段隐藏在模板中,然后列出所有 post 以及每个按钮的 "Add image" 按钮.然后,您将通过单击按钮调用 JS 函数,将隐藏字段更新为 select 对应于单击按钮的 post。单击该按钮还可以使用 JS 提交表单,如果这就是您所追求的用户体验。
好的,让它只与 django 一起工作:
views.py
def addimg(request, pk):
post = get_object_or_404(Post, pk=pk)
if request.method == "POST":
form = AddimgForm(request.POST, request.FILES, initial={'post':post})
if form.is_valid():
addimg = form.save(commit=False)
addimg.image = request.FILES['image']
addimg.save()
return redirect('blog.views.list')
else:
form = AddimgForm(initial={'post':post})
return render(request, 'blog/appendimg.html', {'form': form })
forms.py
class AddimgForm(forms.ModelForm):
class Meta:
model = Addimg
fields = ('post', 'image',)
widgets = {'post': forms.HiddenInput()}
模板形式:
<form enctype="multipart/form-data" method="POST" class="post-form">{% csrf_token %}
{% for hidden in form.hidden_fields %}
{{hidden}}
{% endfor %}
{{ form.as_p }}
<p><button type="submit" >Save</button></p>
</form>
不知道这是否是推荐的方法,因为我是初学者,但接缝工作正常。希望它可以帮助其他人
我有两个模型:
class Post(models.Model):
title = models.CharField(max_length=200)
class Addimg(models.Model):
post = models.ForeignKey('Post')
image = models.ImageField(upload_to='%Y/%m/%d')
现在我有一个 Addimg 模型的视图,可以将图像附加到 Post:
def addimg(request):
if request.method == "POST":
form = AddimgForm(request.POST, request.FILES)
if form.is_valid():
addimg = form.save(commit=False)
addimg.image = request.FILES['image']
addimg.save()
return redirect('blog.views.list')
else:
form = AddimgForm()
return render(request, 'blog/edit.html', {'form': form})
到目前为止,我表单中的图像字段当然是一个选择字段,我 select 和 Post 我希望我的图像与其相关联。我想要的:我有每个 post 的详细视图,其中有一个按钮 "add image" 我想知道是否可以请求我当前 post 的 pk 并自动关联我的 Addimg此 pk 的模型,其形式中没有字段。有什么建议吗?
一种可能的方法是将 post selection 字段隐藏在模板中,然后列出所有 post 以及每个按钮的 "Add image" 按钮.然后,您将通过单击按钮调用 JS 函数,将隐藏字段更新为 select 对应于单击按钮的 post。单击该按钮还可以使用 JS 提交表单,如果这就是您所追求的用户体验。
好的,让它只与 django 一起工作:
views.py
def addimg(request, pk):
post = get_object_or_404(Post, pk=pk)
if request.method == "POST":
form = AddimgForm(request.POST, request.FILES, initial={'post':post})
if form.is_valid():
addimg = form.save(commit=False)
addimg.image = request.FILES['image']
addimg.save()
return redirect('blog.views.list')
else:
form = AddimgForm(initial={'post':post})
return render(request, 'blog/appendimg.html', {'form': form })
forms.py
class AddimgForm(forms.ModelForm):
class Meta:
model = Addimg
fields = ('post', 'image',)
widgets = {'post': forms.HiddenInput()}
模板形式:
<form enctype="multipart/form-data" method="POST" class="post-form">{% csrf_token %}
{% for hidden in form.hidden_fields %}
{{hidden}}
{% endfor %}
{{ form.as_p }}
<p><button type="submit" >Save</button></p>
</form>
不知道这是否是推荐的方法,因为我是初学者,但接缝工作正常。希望它可以帮助其他人