无法在Django中为新表单创建多对多字段
models.py-无法在Django中为新表单创建多对多字段,django,django-models,django-forms,many-to-many,Django,Django Models,Django Forms,Many To Many,models.py- class B(models.Model): filename = models.FileField(upload_to='files/') user = models.ForeignKey(User) class A(models.Model): file = models.ManyToManyField(B, blank=True) forms.py class AForm(forms.ModelForm): file = forms.FileFi
class B(models.Model):
filename = models.FileField(upload_to='files/')
user = models.ForeignKey(User)
class A(models.Model):
file = models.ManyToManyField(B, blank=True)
forms.py
class AForm(forms.ModelForm):
file = forms.FileField(label='Select a file to upload', widget=forms.ClearableFileInput(attrs={'multiple': True}), required=False)
class Meta:
model = A
fields = '__all__'
views.py-
if request.method == 'POST':
a = A()
form = AForm(request.POST, request.FILES, instance=a)
if form.is_valid():
a = form.save(commit=False)
files = request.FILES.getlist('file')
for f in files:
fmodel = B(filename=f, user=request.user)
fmodel.save()
a.file.add(fmodel)
a.save()
这将生成一个505错误,服务器日志将其显示为操作错误,错误位于
fmodel.save()
。我认为A希望模型B已经存在——但不确定如何实现它。这东西太新了 在添加B的实例之前,必须先保存A的实例
:
if request.method == 'POST':
a = A()
form = AForm(request.POST, request.FILES, instance=a)
if form.is_valid():
a = form.save(commit=False)
a.save()
files = request.FILES.getlist('file')
for f in files:
fmodel = B(filename=f, user=request.user)
fmodel.save()
a.file.add(fmodel)
嗨,伊万,与这个问题无关,但你能帮助我如何查看request.POST包含的内容吗?不幸的是,用python打印它不是一个选项。除了打印request.POST
到控制台之外,我没有其他方法。嗨,伊万,你能解释一下为什么我需要form.save(commit=False)和contract.save()。试图解决这个问题,但没有成功form.save(commit=False)
返回您需要在下面向ManyToManyField
添加文件的实例,如果不保存该实例,您将无法执行此操作。