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_Forms - Fatal编程技术网

Django内联表单集,通过多个表单编辑一个值

Django内联表单集,通过多个表单编辑一个值,django,forms,Django,Forms,我正在尝试创建一个表单来编辑父模型中多个字段的值。例如,我有类似于这三个模型的东西: class Language(models.Model): label = models.CharField() class Word(models.Model): language = models.ForeignKey(Language) word = models.CharField() entries = models.ManyToManyField(Entries,

我正在尝试创建一个表单来编辑父模型中多个字段的值。例如,我有类似于这三个模型的东西:

class Language(models.Model):
    label = models.CharField()


class Word(models.Model):
    language = models.ForeignKey(Language)
    word = models.CharField()
    entries = models.ManyToManyField(Entries, null=True, blank=True)


class Entries(models.Model):
    entry = models.CharField()
每种语言大约有50个单词。每个单词将有一个或两个条目

我正在生成表单集以编辑给定语言的条目,如下所示:

class WordForm(forms.ModelForm):
    class Meta:
        model = Word
        hidden = ('language', )

PronounFormSet = inlineformset_factory(Language, Word,
         can_delete=False, extra=0, form=WordForm)
for form in formset:
    obj = form.save(commit=False)
    obj.language = # select the language here
    obj.save()

    entry = Entries.objects.get_or_create(entry=form.cleaned_fields['entries'])
    obj.entries.add(entry)
    obj.save()
这给了我一个
,允许我在Word.entries中添加/删除条目。但是,我希望允许用户直接编辑字段Entries.entry(即字段
Entries.entry
应位于CharField()中。如何修改我的WordForm以允许此操作


我知道可能有更好的方法(例如,不同的数据库模式),但我受到传统实现的严重限制。

如果希望条目是文本字段,可以将自定义字段添加到
模型表单中,并通过明确标识应显示哪些字段来确保不显示默认字段:

class WordForm(forms.ModelForm):
    class Meta:
        model = Word
        hidden = ('language', )
        fields = ('word',)
    entries = forms.CharField()
表单验证逻辑应如下所示:

class WordForm(forms.ModelForm):
    class Meta:
        model = Word
        hidden = ('language', )

PronounFormSet = inlineformset_factory(Language, Word,
         can_delete=False, extra=0, form=WordForm)
for form in formset:
    obj = form.save(commit=False)
    obj.language = # select the language here
    obj.save()

    entry = Entries.objects.get_or_create(entry=form.cleaned_fields['entries'])
    obj.entries.add(entry)
    obj.save()

请记住,在这个实现中,您不能使用此表单编辑字段(因为在呈现表单时,字符字段始终为空)。

直接是什么意思?我希望表单在CharField()中显示Entries模型的
条目
字段您希望能够编辑现有条目还是只允许用户添加新条目?