auto将外键字段与pk对象django相关联

时间:2015-06-02 20:24:19

标签: django forms django-views

我有两种模式:

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模型的视图,可以将图像附加到帖子:

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})

到目前为止工作当然,我的表单中的图像字段是一个选择字段,我选择我希望我的图像与之相关的帖子。我想要的是:我有一个关于每个帖子的详细视图,有一个按钮“添加图像”我想知道是否有可能请求我当前帖子的pk并自动将我的Addimg模型关联到此pk而没有其中的字段形成。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

一种可能的方法是在您的模板中隐藏帖子选择字段,然后列出所有帖子以及"添加图片"每个按钮。然后,您将通过单击将更新隐藏字段的按钮来调用JS函数,以选择与单击按钮对应的帖子。单击该按钮也可以使用JS提交表单,如果这是您之后的用户体验。

答案 1 :(得分:0)

好吧,只是鼓励它只与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>

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