0

アップロードするファイルのカテゴリを追加するようにユーザーに求めるフォームがあります。これはManytoManyFieldです。ただし、このフィールドの値はデータベースに追加されていないため、理由がわかりません。以下のコードの変数はdescategories

<form enctype="multipart/form-data" method="POST" action="" class="uniForm">
        <fieldset class="inlineLabels">
            {% csrf_token %}
            <table>
            <tr>
            <td>Design Title:</td><td>{{ formtoadddesign.modelname}}</td></td></tr>
            <tr><td>Author:</td> <td>{{ formtoadddesign.author }}</td></tr>
            <tr><td>Description:</td> <td>{{ formtoadddesign.description }}</td></tr>
            {% comment %}<tr><td>Design Image:&nbsp&nbsp&nbsp</td><td>{{ formtoadddesign.partimage }}</td></tr>{% endcomment %}
            <tr><td>Tags:</td><td>{{formtoadddesign.tags}}</td></tr>
            <tr><td>Format:</td><td>{{formtoadddesign.format}}</td></tr>
            <tr><td>Category:</td><td>{{formtoadddesign.descategories}}</td></tr>
            <tr><td>Attach File</td><td>{{formtoadddesign.content}}</td></tr>
                    </div>
            </table>
            <br>
            <div class="form_block">
                <input type="submit" class="btn btn-success" value="{% trans 'Add Design' %}">
            </div>
            <br>
        </fieldset>
    </form>

私の中には次のコードがありますviews.py

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

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
4

1 に答える 1

1

あなたが使用しているのであなたはsave(commit=False)必要ですsave_m2m

https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#the-save-methodを参照してください

于 2012-11-25T21:29:21.907 に答える