Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自动将外键字段与pk对象django关联_Django_Forms_Django Views - Fatal编程技术网

自动将外键字段与pk对象django关联

自动将外键字段与pk对象django关联,django,forms,django-views,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 model的视图,可以将图像附加到帖子中: def addimg(reques

我有两种型号:

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

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

到目前为止,我的表单中的图像字段当然是一个选择字段,我在其中选择希望与我的图像相关的帖子。我想要的是:我有一个每个帖子的详细视图,里面有一个按钮“添加图片”,我想知道是否可以请求我当前帖子的主键,并在没有字段的情况下自动将我的添加模型与这个主键关联。有什么建议吗?

一种可能的方法是将帖子选择字段隐藏在模板中,然后列出所有帖子以及每个帖子的“添加图像”按钮。然后,通过单击按钮调用JS函数,该函数将更新隐藏字段,以选择与单击按钮对应的帖子。单击按钮还可以使用JS提交表单,如果您想要的是UX。

好的,只需使用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>
{%csrf\u令牌%}
{%用于隐藏在表单中。隐藏的_字段%}
{{隐藏}}
{%endfor%}
{{form.as_p}}
拯救

我不知道这是否是一个推荐的方法,因为我是一个初学者,但我可以很好地工作。希望它能帮助其他人