Python 模型使用外键形成
forms.py:Python 模型使用外键形成,python,django,Python,Django,forms.py: class Data(models.Model): title = models.CharField(max_length=255) slug = models.SlugField() class Photo(models.Model): photo = models.ImageField(upload_to='img') data = models.ForeignKey(Data) 如何将照片添加到此表单上载?至少有两种可能的答案: A.
class Data(models.Model):
title = models.CharField(max_length=255)
slug = models.SlugField()
class Photo(models.Model):
photo = models.ImageField(upload_to='img')
data = models.ForeignKey(Data)
如何将照片添加到此表单上载?至少有两种可能的答案: A.使用两个表单并将它们发布到同一视图。首先持久化
数据
对象,然后创建照片
对象而不将其提交到数据库,将数据属性分配给数据
实例,然后在照片
实例上调用.save()
(下面提供的示例)
B.使用内联模型表单集:
[编辑]
class DataForm(ModelForm):
class Meta:
model = Data
确保您的表单使用:
multipart/form data
作为enctype,或请求。文件
将为空。将manualy图像字段
添加到表单并覆盖保存
方法以创建照片:
class Data(models.Model):
title = models.CharField(max_length=255)
slug = models.SlugField()
class Photo(models.Model):
photo = models.ImageField(upload_to='img')
data = models.ForeignKey(Data)
class DataForm(forms.ModelForm):
class Meta:
model = Data
class PhotoForm(forms.ModelForm):
class Meta:
model = Photo
exclude = ('data',)
def your_view(request):
data_form = DataForm(request.POST or None)
photo_form = PhotoForm(request.POST or None, request.FILES or None)
if request.method == 'POST':
if data_form.is_valid() and photo_form.is_valid():
data = data_form.save()
photo = photo_form.save(commit=False)
photo.data = data
photo.save()
# do something else here, like a redirect to another view.
return render(request, 'your-template.html',
{'data_form': data_form, 'photo_form': photo_form})
我想是关于内联表单集的。看看ModelForm应该返回它们创建的对象。我编辑了你的答案以反映这一点。谢谢。如果我尝试上传照片,我会出现错误:“此字段为必填字段”。当然,字段(照片)不是空的
class DataForm(ModelForm):
class Meta:
model = Data
photo = forms.ImageField()
def save(self, *arg, **kwargs):
data = super(DataForm, self).save(*arg, **kwargs)
if 'photo' in self.data :
Photo.objects.create(
photo=self.data['photo'],
data=data
)
return data