在Django中将对象添加到数据库后添加多对多值

在Django中将对象添加到数据库后添加多对多值,django,Django,我有一个表单,要求用户为他们正在上传的文件添加一个类别,这是一个ManytoManyField。但是,这个字段的值没有被添加到数据库中,我不知道为什么。下面代码中的变量是desccategories 基本上,我似乎无法从ManytoManyField中获取选择的值,该字段基本上是一个列表,人们可以从中进行选择。我如何访问这些值-cats.all不返回任何内容,所以我一定是做错了什么 这是我的表格: class designform(ModelForm): def __init__(sel

我有一个表单,要求用户为他们正在上传的文件添加一个类别,这是一个ManytoManyField。但是,这个字段的值没有被添加到数据库中,我不知道为什么。下面代码中的变量是desccategories

基本上,我似乎无法从ManytoManyField中获取选择的值,该字段基本上是一个列表,人们可以从中进行选择。我如何访问这些值-cats.all不返回任何内容,所以我一定是做错了什么

这是我的表格:

class designform(ModelForm):
    def __init__(self, *args, **kwargs):
        super(designform, self).__init__(*args,**kwargs)
        self.is_update=False

    def clean(self):
        """
        Do Validation stuff
        """
        if 'modelname' not in self.cleaned_data:
                return
        if not self.is_update:
            return self.cleaned_data

    class Meta:
        model = Design
因为您使用的是savecommit=False,所以需要save_m2m


请参见

您也可以发布您的表格吗
def add_design (request):
    # POST request  
    if request.method == "POST":
        formtoadddesign = designform(request.POST, request.FILES)
        if formtoadddesign.is_valid():
            new_design = formtoadddesign.save(commit=False)
            new_design.adder = request.user
            designname = new_design.modelname
            format = new_design.format
            adder_id = new_design.adder.id
            file = request.FILES['content']
            filename = file.name
            filecontent = file.read()
            file.seek(0)
            new_design.content=store_in_s3_design(filename, filecontent, designname, format, adder_id)
            new_design.save()
            cats = new_design.descategories
            print "new_design id:", repr(new_design.id)
            print cats
            for cat in cats.all():
                new_design.designcategory_id.add(cat)
                print "added %s" % cat
class designform(ModelForm):
    def __init__(self, *args, **kwargs):
        super(designform, self).__init__(*args,**kwargs)
        self.is_update=False

    def clean(self):
        """
        Do Validation stuff
        """
        if 'modelname' not in self.cleaned_data:
                return
        if not self.is_update:
            return self.cleaned_data

    class Meta:
        model = Design