django:如果模型有相关模型(外键)在主模型中显示字段

django: if model has related models (ForeignKey) display Fields in main modelform

我有两个模型:

class Post(models.Model):
    image = models.ImageField(upload_to='%Y/%m/%d')
    title = models.CharField(max_length=200)

class Addimg(models.Model):
    addimages = models.ForeignKey('Post', null=True)
    addimg = models.ImageField(upload_to='images')

我希望使用 "Addimg" 模型将图像添加到我的 Post 模型中,该模型目前运行良好,但现在我希望在编辑父模型时添加图像 (Post) , 所有附加的 "Addimg" 模型也出现在表格中。我怎么能那样做?什么是最简单的解决方案?

这是我处理 "parent" 表单的视图:

def edit(request, pk):
    post = get_object_or_404(Post, pk=pk)
    if request.method == "POST":
        form = PostForm(request.POST, request.FILES, instance=post)
        if form.is_valid():
            post = form.save(commit=False)
            post.save()
            return redirect('blog.views.detail', pk=post.pk)
    else:
        form = PostForm(instance=post)
    return render(request, 'blog/edit.html', {'form': form})

和我的 forms.py:

class PostForm(forms.ModelForm):
    class Meta: 
        model = Post 
        fields = ('image', 'title',)

class AddimgForm(forms.ModelForm):
    class Meta:
        model = Addimg
        fields = ('addimages', 'addimg',)

在我的表单模板中有:

<form enctype="multipart/form-data" method="POST" class="post-form">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit" >Save</button>
</form>

如果有任何提示或有用的链接,我会非常高兴,因为我是 django/programming 的新手,我什至不知道要搜索的正确关键字。谢谢

看看inline formsets

好的,对于 django 来说很简单:

在forms.py中:

from django.forms.models import inlineformset_factory

MyFormSet = inlineformset_factory(Post, Addimg, extra=1, fields = ('addimages', 'addimg',))

在views.py中:

from .forms import PostForm, MyFormSet

def manageimages(request, pk):
    post = get_object_or_404(Post, pk=pk)
    if request.method == "POST":
        formset = MyFormSet(request.POST, request.FILES, instance=post)
        if formset.is_valid():
            formset.save()
            post.save()
            return redirect('blog.views.someview')
    else:
        formset = MyFormSet(instance=post)
    return render(request, 'blog/myformsettemplate.html', {'formset': formset})

在myformsettemplate.html中:

<form enctype="multipart/form-data" method="POST" class="post-form">
    {% csrf_token %}
    {{ formset.management_form }}
    {% for form in formset %}
    <div class="third">
        {{ form.as_p }}
    </div>
    {% endfor %}
    <button type="submit" >Save</button>
</form>