Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在Django中为新表单创建多对多字段_Django_Django Models_Django Forms_Many To Many - Fatal编程技术网

无法在Django中为新表单创建多对多字段

无法在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

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.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
添加文件的实例,如果不保存该实例,您将无法执行此操作。