如何创建一个django表单,允许我编辑具有反向多关系的模型?

时间:2016-04-25 15:56:02

标签: python django forms django-admin

我正在尝试创建一个显示单词,含义和相关句子的页面。我希望这些能够以我可以编辑的形式显示,然后将更改保存到数据库中。此外,我希望能够在页面上显示多个表单。所以如果我有5个单词,我会在页面上得到5个表单,其中包含单词,含义和句子的区域,所有这些都是可编辑的。

我已经能够创建一个带有单词及其含义的表单。但是,我找不到使用表单显示相关句子(与我的Word类具有ManyToMany关系)的方法。

我读过有关modelformset_factory,BaseFormSet的内容,我知道你可以传递一个查询集来创建多个表单。但是,我正努力将它们全部融合在一起以创建我想要的形式。当我尝试将queryset与MeaningsForm一起使用时,它总是抛出一个错误,因为它只接受一个对象与一个查询集对象。

这是我目前的代码,它只显示一个单词及其相关含义。如果有一种方法可以使用更好的管理视图来执行我想要的操作。任何帮助/建议将不胜感激。

models.py

class Word(models.Model):
    word = models.CharField(max_length = 300)

class Sentence(models.Model):
    sentence = models.TextField(null=True)
    word = models.ManyToManyField(Word)

class WordMeanings(models.Model):
    word = models.ForeignKey(Word)
    meaning = models.CharField(max_length = 500)

forms.py

class WordsForm(ModelForm):
    class Meta:
        model = Words 
        fields = ('word',)

class MeaningsForm(ModelForm):
    class Meta:
        model = WordMeanings 
        fields = ('meaning',)

views.py

def sentence_review(request):
    word = Words.objects.get(id=10)
    meaningset= inlineformset_factory(Word, WordMeanings, fields=('meaning',))
    meaningset = meaningset(instance=word)
    word_form = WordsForm(instance=word)
    return render(request, 'sentence_review.html', {"wordform": word_form, "meaningset_form": meaningset} ) 

0 个答案:

没有答案