1

私はm2m関係を保存することに感銘を受けました。

models.py

class BasicTag(models.Model):
    name = models.CharField(max_length=150, verbose_name="Tag Name")
    image_class = models.CharField(max_length=30, blank=True)
    color = models.CharField(max_length=10, blank=True)

    def __unicode__(self):
        return self.name


class ExtendedTag(models.Model):
    parent = models.ManyToManyField(BasicTag, blank=True,
                                    related_name="parent")
    category = models.ManyToManyField(BasicTag, blank=True,
                                      related_name="category")

    def __unicode__(self):
        return self._id


class CombineTag(BasicTag, ExtendedTag):
    """

    """

フォーム.py

class CombineTagForm(forms.ModelForm):
    class Meta:
        model = CombineTag

フォームを次のように初期化すると

>form = CombineTagForm({"name":"shyam"})#this don't have any parent i.e. root tag
>form.is_valid()
True
>instance = form.save(commit = False)
>instance.save()
>form.save() #return errors
#error
ProgrammingError: column tag_extendedtag_parent.basictag_id does not exist
LINE 1: DELETE FROM "tag_extendedtag_parent" WHERE "tag_extendedtag_...
>form.save_m2m() #return errors ... struck here

では、m2mフィールドのモデルフォームを保存するにはどうすればよいですか。私はそれを言う公式文書に従っていました

モデルに多対多の関係があり、フォームを保存するときに commit=False を指定した場合、Django は多対多の関係のフォーム データをすぐに保存できません。これは、インスタンスがデータベースに存在するまで、インスタンスの多対多データを保存できないためです。

しかし、ここで何が欠けているのかを理解できませんでした。

4

0 に答える 0