自动将外键字段关联到 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>

不知道这是否是推荐的方法,因为我是初学者,但接缝工作正常。希望它可以帮助其他人