0

3 つの s ( 、および)Projectを含むという名前のモデルがあります。そのうちの1 つ ( ) はフォームで除外されており、手動で保存する必要があります。したがって、ビューでは、フォームのいくつかのフィールドを変更する必要があるため、使用します。フィールドを変更した後、フォームが保存され、タグを 1 つずつ追加します。次に、 saveを呼び出すと、ビューの行で指定されたエラーが表示されます。ManyToManyFieldmember_studentsupervisortagtagsave(commit=False)save_m2mManyToManyFieldsave_m2m

invalid literal for int() with base 10: 'a'

これが私のモデルです。

class Tag(models.Model):
    name = models.CharField(unique=True, max_length=60)
    slug = models.SlugField(max_length=60, unique=True)

    def save(self, *args, **kwargs):
        if not self.id:
            self.slug = slugify(self.name)
        super(Tag, self).save(*args, **kwargs)


class Project(models.Model):
    '''Main Project uploading'''
    title = models.CharField(max_length=300)
    description = models.TextField(null=True)
    #year = models.ForeignKey(Year)
    tag = models.ManyToManyField(Tag)
    owner_student = models.ForeignKey(Student, related_name='member_student')
    member_student = models.ManyToManyField(Student, blank=True, null=True)
    supervisor = models.ManyToManyField(Supervisor, blank=True, null=True)
    subject = models.ForeignKey(Subject)
    main_document = models.FileField(upload_to='main_documents/')
    supporting_document = models.FileField(upload_to='supp_documents/', blank=True, null=True)
    source_code = models.FileField(upload_to='source_code/', blank=True, null=True)
    screenshot = models.ImageField(upload_to='screenshots/', blank=True, null=True)

これは次のforms.pyとおりです。

class ProjectForm(forms.ModelForm):
    class Meta:
        model = Project
        exclude = ['owner_student', 'slug', 'tag']           
    tag = forms.CharField(max_length=100)

これがビューです。

def add_project(request):
    parameters = {}
    if request.method =="POST":
        upload_form = ProjectForm(request.POST, request.FILES)
        if upload_form.is_valid():
            new_form = upload_form.save(commit=False)
            mystud = Student.objects.get(user=request.user)
            new_form.owner_student = mystud
            new_form.save()
            tags =  upload_form.cleaned_data['tag']
            tags = tags.split(',')
            for eachtag in tags:
                tag, created = Tag.objects.get_or_create(name=eachtag.strip())
                tag.save()
                new_form.tag.add(tag)
            upload_form.save_m2m()
            return HttpResponseRedirect(reverse(project_page, args=(new_form.slug,)))
        else:
            parameters["upload_form"] = upload_form
            return render_to_response('upload.html', parameters)
    else:
        upload_form = ProjectForm()
        parameters["upload_form"] = upload_form
        parameters["page_title"] = "Upload your Project"
        return render_to_response('upload.html', parameters)

ManyToManyFieldそれで、私の質問は、エラーを発生させずにタグと他の2つを保存するにはどうすればよいですか? save_m2mによって返されるタプルのために、関数がエラーを出していると思いますget_or_create

4

1 に答える 1