[英]django: if model has related models (ForeignKey) display Fields in main modelform
I have two models: 我有两个模型:
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')
I wish to add images to my Post model with the "Addimg" model which works fine so far, but now i want that when I edit my parent model (Post), all the appended "Addimg" models also appear in the form. 我希望使用到目前为止可以正常运行的“ Addimg”模型将图像添加到我的Post模型中,但是现在我希望在编辑父模型(Post)时,所有附加的“ Addimg”模型也都出现在表单中。 How could i do that? 我该怎么办? What would be the simplest solution? 什么是最简单的解决方案?
Here is my view which handles my "parent" form: 这是处理“父母”表格的视图:
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})
and my forms.py: 和我的forms.py:
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ('image', 'title',)
class AddimgForm(forms.ModelForm):
class Meta:
model = Addimg
fields = ('addimages', 'addimg',)
In my form template I have: 在我的表单模板中,我有:
<form enctype="multipart/form-data" method="POST" class="post-form">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" >Save</button>
</form>
I would be very happy about any tips or usefull links since i'm very new to django/programming I even don't know the right keywords to search for. 我对任何提示或有用的链接都会非常满意,因为我对Django /编程非常陌生,我什至不知道要搜索的正确关键字。 Thanks 谢谢
看看内联表单集 。
Ok got it easy thing for django: 好的,对于django来说很简单:
in forms.py: 在forms.py中:
from django.forms.models import inlineformset_factory
MyFormSet = inlineformset_factory(Post, Addimg, extra=1, fields = ('addimages', 'addimg',))
in views.py: 在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})
and in myformsettemplate.html: 并在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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.