首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在模型字段被覆盖的情况下对ModelForm进行即时处理

在模型字段被覆盖的情况下对ModelForm进行即时处理
EN

Stack Overflow用户
提问于 2011-04-15 16:14:15
回答 1查看 127关注 0票数 0

我有一个基于以下模型的ModelForm字段:

代码语言:javascript
复制
class Phrase(models.Model):
   subject = models.ForeignKey(Entity) # Entity is unique on a per Entity.name basis
   object = models.ForeignKey(Entity) # Entity is unique on a per Entity.name basis

modelform (PhraseForm)有一个字段“subject”,即CharField。我希望用户能够输入一个字符串。当保存模型表单,且字符串与现有实体不匹配时,将创建一个新实体。

这就是为什么我必须覆盖Modelform的"subject“字段,因为我不能使用Modelform的自动生成的"subject”字段(我希望我在这里说清楚了)。

现在,当通过模型表单创建一个新短语时,所有测试都运行良好。但是,在修改短语时:

代码语言:javascript
复制
p = Phrase.objects.latest()
pf = PhraseForm({'subject': 'anewsubject'}, instance=p).

pf.is_valid()返回False。我遇到的错误是,"object“不能是None。这是有意义的,因为对象字段确实没有被填充。

处理这件事最好的方法是什么?当然,我可以检查init()函数中是否提供了一个实例,然后从传递的实例中分配缺失的字段值。但是,这似乎并不是正确的方法,因此,是否有一种不那么麻烦的方法来确保实例的数据通过ModelForm传递?

现在我输入了这个,我想没有了,因为底层的模型字段正在被覆盖,这意味着表单字段值需要再次填充,这样一切才能正常工作。这让我重新表达了我的问题:允许用户输入免费文本并将其链接到一个新的或现有的实体的方式是正确的吗?

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-15 18:23:23

你为什么要用表格来修改。

代码语言:javascript
复制
p = Phrase.objects.latest()
p.subject = Entity.objects.get_or_create(name='anewsubject')[0]

for get_or_create

如果您实际使用的是该表单,它应该工作得很好:

代码语言:javascript
复制
def mod_phrase(request, phrase_id=None):
    phrase = get_object_or_404(Phrase, pk=phrase_id)

    if request.method == 'POST':
        form = PhraseForm(request.POST, instance=phrase)
        if form.is_valid():
            form.save()
            return HttpResponse("Success")
    else:
        form = PhraseForm(instance=phrase)

    context = { 'form': form }

    return render_to_response('modify-phrase.html', context,
        context_instance=RequestContext(request))

设置ModelForm的实例将设置初始数据,并让表单知道表单使用的是哪个对象。在试图使用表单的方式中,您正在传递一个无效的data字典(缺乏object),该表单正确地告诉您无效。当您在上面的示例中将data设置为request.POST时,request.POST包含允许表单验证的初始数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5679579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档