Python 外键多个图像未保存在django中
我正在尝试保存一个包含多个图像的表单。我有两个模型后模型和图像模型。问题是,当我试图上传帖子时,图片没有保存。我可以上传表单中的图像,但当我单击“发布”时,仅保存标题,图像不会保存。有人能告诉我我做错了什么吗 型号.pyPython 外键多个图像未保存在django中,python,django,forms,image,Python,Django,Forms,Image,我正在尝试保存一个包含多个图像的表单。我有两个模型后模型和图像模型。问题是,当我试图上传帖子时,图片没有保存。我可以上传表单中的图像,但当我单击“发布”时,仅保存标题,图像不会保存。有人能告诉我我做错了什么吗 型号.py class Post(models.Model): title = models.CharField(max_length=200) author = models.ForeignKey(User, on_delete=models.CASCADE)
class Post(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(User, on_delete=models.CASCADE)
class Images(models.Model):
article = models.ForeignKey(Post, default=None, on_delete=models.CASCADE)
images = models.ImageField(upload_to='media/images/',blank=True, null=True)
class CreatePost(CreateView):
model = Post
form_class = Createpost
template_name = 'add_post.html'
def get_context_data(self, **kwargs):
data = super(CreatePost, self).get_context_data(**kwargs)
data['form_images'] = PostImageFormSet()
if self.request.POST:
data['form_images'] = PostImageFormSet(self.request.POST, self.request.FILES)
else:
data['form_images'] = PostImageFormSet()
return data
def form_valid(self, form):
form.instance.author = self.request.user
context = self.get_context_data()
form_img = context['form_images']
atc = form.save(commit=False)
save = atc.save()
if form_img.is_valid():
form_img.instance = save
form_img.save()
form.save_m2m()
return super(CreatePost, self).form_valid(form)
def get_success_url(self):
return reverse('detail', args=(self.object.id,))
class ImageForm(forms.ModelForm):
image = forms.ImageField(label='Image')
class Meta:
model = Images
exclude = ()
widgets = {
'images': forms.ClearableFileInput(attrs={'multiple':True}),
}
class CreatePost(forms.ModelForm):
class Meta:
model = Post
fields = ["title",]
PostImageFormSet = inlineformset_factory(
Post, Images, form=ImageForm,
extra=1, can_delete=True, #fields=['images'],
)
...
INSTALLED_APPS = [
...
'posts.apps.PostsConfig',
]
...
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
from django.db import models
from django.conf import settings
class Post(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
class Images(models.Model):
article = models.ForeignKey(Post, default=None, on_delete=models.CASCADE)
images = models.ImageField(upload_to='images/', blank=True, null=True)
from django import forms
from django.forms.models import inlineformset_factory
from .models import Post, Images
class ImageForm(forms.ModelForm):
class Meta:
model = Images
fields = ('images',)
widgets = {
'images': forms.ClearableFileInput(attrs={'multiple': True}),
}
class CreatePostForm(forms.ModelForm):
class Meta:
model = Post
fields = ["title", ]
PostImageFormSet = inlineformset_factory(
Post, Images, form=ImageForm,
extra=1, can_delete=True, # fields=['images'],
)
from django.shortcuts import reverse, HttpResponseRedirect
from .models import Post, Images
from django.views.generic import CreateView, DetailView
from .forms import CreatePostForm, PostImageFormSet
class CreatePost(CreateView):
model = Post
form_class = CreatePostForm
template_name = 'posts/add_post.html'
extra_context = {'form_images': PostImageFormSet()}
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.author = self.request.user
self.object.save()
for key in form.files:
img_files = form.files.getlist(key)
for file in img_files:
Images.objects.create(images=file, article=self.object)
return HttpResponseRedirect(self.get_success_url())
def form_invalid(self, form):
context = self.get_context_data(form=form)
return self.render_to_response(context)
def get_success_url(self):
return reverse('detail', kwargs={'pk': self.object.id})
class PostDetail(DetailView):
model = Post
template_name = 'posts/detail.html'
pk_url_kwarg = 'pk'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
return context
视图.py
class Post(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(User, on_delete=models.CASCADE)
class Images(models.Model):
article = models.ForeignKey(Post, default=None, on_delete=models.CASCADE)
images = models.ImageField(upload_to='media/images/',blank=True, null=True)
class CreatePost(CreateView):
model = Post
form_class = Createpost
template_name = 'add_post.html'
def get_context_data(self, **kwargs):
data = super(CreatePost, self).get_context_data(**kwargs)
data['form_images'] = PostImageFormSet()
if self.request.POST:
data['form_images'] = PostImageFormSet(self.request.POST, self.request.FILES)
else:
data['form_images'] = PostImageFormSet()
return data
def form_valid(self, form):
form.instance.author = self.request.user
context = self.get_context_data()
form_img = context['form_images']
atc = form.save(commit=False)
save = atc.save()
if form_img.is_valid():
form_img.instance = save
form_img.save()
form.save_m2m()
return super(CreatePost, self).form_valid(form)
def get_success_url(self):
return reverse('detail', args=(self.object.id,))
class ImageForm(forms.ModelForm):
image = forms.ImageField(label='Image')
class Meta:
model = Images
exclude = ()
widgets = {
'images': forms.ClearableFileInput(attrs={'multiple':True}),
}
class CreatePost(forms.ModelForm):
class Meta:
model = Post
fields = ["title",]
PostImageFormSet = inlineformset_factory(
Post, Images, form=ImageForm,
extra=1, can_delete=True, #fields=['images'],
)
...
INSTALLED_APPS = [
...
'posts.apps.PostsConfig',
]
...
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
from django.db import models
from django.conf import settings
class Post(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
class Images(models.Model):
article = models.ForeignKey(Post, default=None, on_delete=models.CASCADE)
images = models.ImageField(upload_to='images/', blank=True, null=True)
from django import forms
from django.forms.models import inlineformset_factory
from .models import Post, Images
class ImageForm(forms.ModelForm):
class Meta:
model = Images
fields = ('images',)
widgets = {
'images': forms.ClearableFileInput(attrs={'multiple': True}),
}
class CreatePostForm(forms.ModelForm):
class Meta:
model = Post
fields = ["title", ]
PostImageFormSet = inlineformset_factory(
Post, Images, form=ImageForm,
extra=1, can_delete=True, # fields=['images'],
)
from django.shortcuts import reverse, HttpResponseRedirect
from .models import Post, Images
from django.views.generic import CreateView, DetailView
from .forms import CreatePostForm, PostImageFormSet
class CreatePost(CreateView):
model = Post
form_class = CreatePostForm
template_name = 'posts/add_post.html'
extra_context = {'form_images': PostImageFormSet()}
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.author = self.request.user
self.object.save()
for key in form.files:
img_files = form.files.getlist(key)
for file in img_files:
Images.objects.create(images=file, article=self.object)
return HttpResponseRedirect(self.get_success_url())
def form_invalid(self, form):
context = self.get_context_data(form=form)
return self.render_to_response(context)
def get_success_url(self):
return reverse('detail', kwargs={'pk': self.object.id})
class PostDetail(DetailView):
model = Post
template_name = 'posts/detail.html'
pk_url_kwarg = 'pk'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
return context
forms.py
class Post(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(User, on_delete=models.CASCADE)
class Images(models.Model):
article = models.ForeignKey(Post, default=None, on_delete=models.CASCADE)
images = models.ImageField(upload_to='media/images/',blank=True, null=True)
class CreatePost(CreateView):
model = Post
form_class = Createpost
template_name = 'add_post.html'
def get_context_data(self, **kwargs):
data = super(CreatePost, self).get_context_data(**kwargs)
data['form_images'] = PostImageFormSet()
if self.request.POST:
data['form_images'] = PostImageFormSet(self.request.POST, self.request.FILES)
else:
data['form_images'] = PostImageFormSet()
return data
def form_valid(self, form):
form.instance.author = self.request.user
context = self.get_context_data()
form_img = context['form_images']
atc = form.save(commit=False)
save = atc.save()
if form_img.is_valid():
form_img.instance = save
form_img.save()
form.save_m2m()
return super(CreatePost, self).form_valid(form)
def get_success_url(self):
return reverse('detail', args=(self.object.id,))
class ImageForm(forms.ModelForm):
image = forms.ImageField(label='Image')
class Meta:
model = Images
exclude = ()
widgets = {
'images': forms.ClearableFileInput(attrs={'multiple':True}),
}
class CreatePost(forms.ModelForm):
class Meta:
model = Post
fields = ["title",]
PostImageFormSet = inlineformset_factory(
Post, Images, form=ImageForm,
extra=1, can_delete=True, #fields=['images'],
)
...
INSTALLED_APPS = [
...
'posts.apps.PostsConfig',
]
...
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
from django.db import models
from django.conf import settings
class Post(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
class Images(models.Model):
article = models.ForeignKey(Post, default=None, on_delete=models.CASCADE)
images = models.ImageField(upload_to='images/', blank=True, null=True)
from django import forms
from django.forms.models import inlineformset_factory
from .models import Post, Images
class ImageForm(forms.ModelForm):
class Meta:
model = Images
fields = ('images',)
widgets = {
'images': forms.ClearableFileInput(attrs={'multiple': True}),
}
class CreatePostForm(forms.ModelForm):
class Meta:
model = Post
fields = ["title", ]
PostImageFormSet = inlineformset_factory(
Post, Images, form=ImageForm,
extra=1, can_delete=True, # fields=['images'],
)
from django.shortcuts import reverse, HttpResponseRedirect
from .models import Post, Images
from django.views.generic import CreateView, DetailView
from .forms import CreatePostForm, PostImageFormSet
class CreatePost(CreateView):
model = Post
form_class = CreatePostForm
template_name = 'posts/add_post.html'
extra_context = {'form_images': PostImageFormSet()}
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.author = self.request.user
self.object.save()
for key in form.files:
img_files = form.files.getlist(key)
for file in img_files:
Images.objects.create(images=file, article=self.object)
return HttpResponseRedirect(self.get_success_url())
def form_invalid(self, form):
context = self.get_context_data(form=form)
return self.render_to_response(context)
def get_success_url(self):
return reverse('detail', kwargs={'pk': self.object.id})
class PostDetail(DetailView):
model = Post
template_name = 'posts/detail.html'
pk_url_kwarg = 'pk'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
return context
模板
<form class="post" method="POST" enctype="multipart/form-data" >
{% csrf_token %}
{{form.title.label_tag }} {{ form.title }} <br>
{{ form_images.management_form }}
{% for form in form_images.forms %}
{% for field in form.visible_fields %}
{% if forloop.first %}
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
{{ field.errors.as_ul }}
{{ field.label_tag }} {{ field }} <br>
{% endif %}
{% endfor %}
{% endfor %}
<br><br>
<button type="submit" value="post" id="post">Post</button>
</form>
{%csrf_令牌%}
{{form.title.label_tag}{{form.title}}
{{form_images.management_form}}
{form_images.forms%}
{%form.visible_fields%}
{%if-forloop.first%}
{%用于隐藏在表单中。隐藏的_字段%}
{{隐藏}}
{%endfor%}
{{field.errors.as_ul}}
{{field.label_tag}{{field}}
{%endif%}
{%endfor%}
{%endfor%}
邮递
提前感谢。使用
'images':forms.ClearableFileInput(attrs={'multiple':True})
和extra=1
使这个问题不同于处理典型的表单集。当您希望显示同一表单的多个实例时,将使用表单集。在您的问题中,您似乎希望显示一个ImageField
,并让用户选择多个。如果是这样的话,你甚至不需要表单集
我将提供一个可行的示例,其中formset仅用于呈现表单中的图像字段,用户可以从该字段中选择多个图像。它可以处理extra=3
,但我不知道为什么有人需要这样做
设置.py
class Post(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(User, on_delete=models.CASCADE)
class Images(models.Model):
article = models.ForeignKey(Post, default=None, on_delete=models.CASCADE)
images = models.ImageField(upload_to='media/images/',blank=True, null=True)
class CreatePost(CreateView):
model = Post
form_class = Createpost
template_name = 'add_post.html'
def get_context_data(self, **kwargs):
data = super(CreatePost, self).get_context_data(**kwargs)
data['form_images'] = PostImageFormSet()
if self.request.POST:
data['form_images'] = PostImageFormSet(self.request.POST, self.request.FILES)
else:
data['form_images'] = PostImageFormSet()
return data
def form_valid(self, form):
form.instance.author = self.request.user
context = self.get_context_data()
form_img = context['form_images']
atc = form.save(commit=False)
save = atc.save()
if form_img.is_valid():
form_img.instance = save
form_img.save()
form.save_m2m()
return super(CreatePost, self).form_valid(form)
def get_success_url(self):
return reverse('detail', args=(self.object.id,))
class ImageForm(forms.ModelForm):
image = forms.ImageField(label='Image')
class Meta:
model = Images
exclude = ()
widgets = {
'images': forms.ClearableFileInput(attrs={'multiple':True}),
}
class CreatePost(forms.ModelForm):
class Meta:
model = Post
fields = ["title",]
PostImageFormSet = inlineformset_factory(
Post, Images, form=ImageForm,
extra=1, can_delete=True, #fields=['images'],
)
...
INSTALLED_APPS = [
...
'posts.apps.PostsConfig',
]
...
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
from django.db import models
from django.conf import settings
class Post(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
class Images(models.Model):
article = models.ForeignKey(Post, default=None, on_delete=models.CASCADE)
images = models.ImageField(upload_to='images/', blank=True, null=True)
from django import forms
from django.forms.models import inlineformset_factory
from .models import Post, Images
class ImageForm(forms.ModelForm):
class Meta:
model = Images
fields = ('images',)
widgets = {
'images': forms.ClearableFileInput(attrs={'multiple': True}),
}
class CreatePostForm(forms.ModelForm):
class Meta:
model = Post
fields = ["title", ]
PostImageFormSet = inlineformset_factory(
Post, Images, form=ImageForm,
extra=1, can_delete=True, # fields=['images'],
)
from django.shortcuts import reverse, HttpResponseRedirect
from .models import Post, Images
from django.views.generic import CreateView, DetailView
from .forms import CreatePostForm, PostImageFormSet
class CreatePost(CreateView):
model = Post
form_class = CreatePostForm
template_name = 'posts/add_post.html'
extra_context = {'form_images': PostImageFormSet()}
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.author = self.request.user
self.object.save()
for key in form.files:
img_files = form.files.getlist(key)
for file in img_files:
Images.objects.create(images=file, article=self.object)
return HttpResponseRedirect(self.get_success_url())
def form_invalid(self, form):
context = self.get_context_data(form=form)
return self.render_to_response(context)
def get_success_url(self):
return reverse('detail', kwargs={'pk': self.object.id})
class PostDetail(DetailView):
model = Post
template_name = 'posts/detail.html'
pk_url_kwarg = 'pk'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
return context
urls.py(例如,我放入了项目的URL文件)
forms.py
class Post(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(User, on_delete=models.CASCADE)
class Images(models.Model):
article = models.ForeignKey(Post, default=None, on_delete=models.CASCADE)
images = models.ImageField(upload_to='media/images/',blank=True, null=True)
class CreatePost(CreateView):
model = Post
form_class = Createpost
template_name = 'add_post.html'
def get_context_data(self, **kwargs):
data = super(CreatePost, self).get_context_data(**kwargs)
data['form_images'] = PostImageFormSet()
if self.request.POST:
data['form_images'] = PostImageFormSet(self.request.POST, self.request.FILES)
else:
data['form_images'] = PostImageFormSet()
return data
def form_valid(self, form):
form.instance.author = self.request.user
context = self.get_context_data()
form_img = context['form_images']
atc = form.save(commit=False)
save = atc.save()
if form_img.is_valid():
form_img.instance = save
form_img.save()
form.save_m2m()
return super(CreatePost, self).form_valid(form)
def get_success_url(self):
return reverse('detail', args=(self.object.id,))
class ImageForm(forms.ModelForm):
image = forms.ImageField(label='Image')
class Meta:
model = Images
exclude = ()
widgets = {
'images': forms.ClearableFileInput(attrs={'multiple':True}),
}
class CreatePost(forms.ModelForm):
class Meta:
model = Post
fields = ["title",]
PostImageFormSet = inlineformset_factory(
Post, Images, form=ImageForm,
extra=1, can_delete=True, #fields=['images'],
)
...
INSTALLED_APPS = [
...
'posts.apps.PostsConfig',
]
...
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
from django.db import models
from django.conf import settings
class Post(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
class Images(models.Model):
article = models.ForeignKey(Post, default=None, on_delete=models.CASCADE)
images = models.ImageField(upload_to='images/', blank=True, null=True)
from django import forms
from django.forms.models import inlineformset_factory
from .models import Post, Images
class ImageForm(forms.ModelForm):
class Meta:
model = Images
fields = ('images',)
widgets = {
'images': forms.ClearableFileInput(attrs={'multiple': True}),
}
class CreatePostForm(forms.ModelForm):
class Meta:
model = Post
fields = ["title", ]
PostImageFormSet = inlineformset_factory(
Post, Images, form=ImageForm,
extra=1, can_delete=True, # fields=['images'],
)
from django.shortcuts import reverse, HttpResponseRedirect
from .models import Post, Images
from django.views.generic import CreateView, DetailView
from .forms import CreatePostForm, PostImageFormSet
class CreatePost(CreateView):
model = Post
form_class = CreatePostForm
template_name = 'posts/add_post.html'
extra_context = {'form_images': PostImageFormSet()}
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.author = self.request.user
self.object.save()
for key in form.files:
img_files = form.files.getlist(key)
for file in img_files:
Images.objects.create(images=file, article=self.object)
return HttpResponseRedirect(self.get_success_url())
def form_invalid(self, form):
context = self.get_context_data(form=form)
return self.render_to_response(context)
def get_success_url(self):
return reverse('detail', kwargs={'pk': self.object.id})
class PostDetail(DetailView):
model = Post
template_name = 'posts/detail.html'
pk_url_kwarg = 'pk'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
return context
视图.py
class Post(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(User, on_delete=models.CASCADE)
class Images(models.Model):
article = models.ForeignKey(Post, default=None, on_delete=models.CASCADE)
images = models.ImageField(upload_to='media/images/',blank=True, null=True)
class CreatePost(CreateView):
model = Post
form_class = Createpost
template_name = 'add_post.html'
def get_context_data(self, **kwargs):
data = super(CreatePost, self).get_context_data(**kwargs)
data['form_images'] = PostImageFormSet()
if self.request.POST:
data['form_images'] = PostImageFormSet(self.request.POST, self.request.FILES)
else:
data['form_images'] = PostImageFormSet()
return data
def form_valid(self, form):
form.instance.author = self.request.user
context = self.get_context_data()
form_img = context['form_images']
atc = form.save(commit=False)
save = atc.save()
if form_img.is_valid():
form_img.instance = save
form_img.save()
form.save_m2m()
return super(CreatePost, self).form_valid(form)
def get_success_url(self):
return reverse('detail', args=(self.object.id,))
class ImageForm(forms.ModelForm):
image = forms.ImageField(label='Image')
class Meta:
model = Images
exclude = ()
widgets = {
'images': forms.ClearableFileInput(attrs={'multiple':True}),
}
class CreatePost(forms.ModelForm):
class Meta:
model = Post
fields = ["title",]
PostImageFormSet = inlineformset_factory(
Post, Images, form=ImageForm,
extra=1, can_delete=True, #fields=['images'],
)
...
INSTALLED_APPS = [
...
'posts.apps.PostsConfig',
]
...
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
from django.db import models
from django.conf import settings
class Post(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
class Images(models.Model):
article = models.ForeignKey(Post, default=None, on_delete=models.CASCADE)
images = models.ImageField(upload_to='images/', blank=True, null=True)
from django import forms
from django.forms.models import inlineformset_factory
from .models import Post, Images
class ImageForm(forms.ModelForm):
class Meta:
model = Images
fields = ('images',)
widgets = {
'images': forms.ClearableFileInput(attrs={'multiple': True}),
}
class CreatePostForm(forms.ModelForm):
class Meta:
model = Post
fields = ["title", ]
PostImageFormSet = inlineformset_factory(
Post, Images, form=ImageForm,
extra=1, can_delete=True, # fields=['images'],
)
from django.shortcuts import reverse, HttpResponseRedirect
from .models import Post, Images
from django.views.generic import CreateView, DetailView
from .forms import CreatePostForm, PostImageFormSet
class CreatePost(CreateView):
model = Post
form_class = CreatePostForm
template_name = 'posts/add_post.html'
extra_context = {'form_images': PostImageFormSet()}
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.author = self.request.user
self.object.save()
for key in form.files:
img_files = form.files.getlist(key)
for file in img_files:
Images.objects.create(images=file, article=self.object)
return HttpResponseRedirect(self.get_success_url())
def form_invalid(self, form):
context = self.get_context_data(form=form)
return self.render_to_response(context)
def get_success_url(self):
return reverse('detail', kwargs={'pk': self.object.id})
class PostDetail(DetailView):
model = Post
template_name = 'posts/detail.html'
pk_url_kwarg = 'pk'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
return context
add_post.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.p-5 {
padding: 150px;
}
</style>
</head>
<body>
<div class="p-5">
<form class="post" method="POST" enctype="multipart/form-data">
{% csrf_token %} {{ form.title.label_tag }} {{ form.title }} <br>
{{ form_images.management_form }}
{% for form in form_images.forms %}
{% for field in form.visible_fields %}
{% if forloop.first %}
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
{{ field.errors.as_ul }}
{{ field.label_tag }} {{ field }} <br>
{% endif %}
{% endfor %}
{% endfor %}
<br><br>
<button type="submit" value="post" id="post">Post</button>
</form>
</div>
</body>
</html>
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
img {
height: auto;
width: 200px;
}
</style>
</head>
<body>
<h1>{{ post.title }}</h1>
{% for img in post.images_set.all %}
<div>
<img src="{{ img.images.url }}" alt="{{ img.name }}">
</div>
{% empty %}
<p>No images</p>
{% endfor %}
</body>
</html>
标题
.p-5{
填充:150px;
}
{%csrf\u标记%}{form.title.label\u tag}{{form.title}}
{{form_images.management_form}}
{form_images.forms%}
{%form.visible_fields%}
{%if-forloop.first%}
{%用于隐藏在表单中。隐藏的_字段%}
{{隐藏}}
{%endfor%}
{{field.errors.as_ul}}
{{field.label_tag}{{field}}
{%endif%}
{%endfor%}
{%endfor%}
邮递
detail.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.p-5 {
padding: 150px;
}
</style>
</head>
<body>
<div class="p-5">
<form class="post" method="POST" enctype="multipart/form-data">
{% csrf_token %} {{ form.title.label_tag }} {{ form.title }} <br>
{{ form_images.management_form }}
{% for form in form_images.forms %}
{% for field in form.visible_fields %}
{% if forloop.first %}
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
{{ field.errors.as_ul }}
{{ field.label_tag }} {{ field }} <br>
{% endif %}
{% endfor %}
{% endfor %}
<br><br>
<button type="submit" value="post" id="post">Post</button>
</form>
</div>
</body>
</html>
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
img {
height: auto;
width: 200px;
}
</style>
</head>
<body>
<h1>{{ post.title }}</h1>
{% for img in post.images_set.all %}
<div>
<img src="{{ img.images.url }}" alt="{{ img.name }}">
</div>
{% empty %}
<p>No images</p>
{% endfor %}
</body>
</html>
{%load static%}
标题
img{
高度:自动;
宽度:200px;
}
{{post.title}}
{post.images_set.all%中img的百分比}
{%empty%}
没有图像
{%endfor%}
Post的外键真的拼写为“Post”吗?还是拼写错误?只是拼写错误对不起,当我复制到此处时,我想我键入的是错误的。我的问题是否不适合回答?我觉得你的表格逻辑不正确或不合常规。我会在它的顶部放置一个断点,然后逐步查看到底发生了什么。我是django的新手,如何添加断点?天哪,非常感谢@Jarad。你救了我一天:D。我已经试了一百次了。你的代码工作得很好。再次感谢:D