2011-09-20 92 views
0

我正试图解决这个问题。我有一个有多个模型的表单。基本上有人写了一个故事,然后把他们的用户名和这个用户名与该故事相关联。这是非常基本的......显然不是django。除了搜索几小时以找到有助于实质上多个SQL插入的东西外,它似乎是不可能的。即使我已验证了缩进,但我得到的错误无法返回HTTPResponseObject。多个模型的Django表单无法返回HttpResponse

这是我的观点:

def submit_story(request): 
    if request.method == 'POST': 
     f = request.POST.copy() 
     sdata = { 
      'author': f['username'] 
      } 
     a = AuthorForm() 
     p = StoryForm(sdata) 
     if a.is_valid(): 
      a.save() 
      if p.is_valid(): 
       p.save() 
       return HttpResponseRedirect('/thanks/') 

这里是我的模型:

class Author(models.Model): 
    username = models.CharField(max_length=120, unique="True") 
    email = models.EmailField() 
    firstname = models.CharField(max_length=500) 
    lastname = models.CharField(max_length=500) 

class Story(models.Model): 
    title = models.CharField(max_length=1000) 
    text = models.CharField(max_length=5000) 
    date = models.DateField() 
    likes = models.IntegerField() 
    dislikes = models.IntegerField() 
    views = models.IntegerField() 
    author = models.ForeignKey('Author') 

在此先感谢。我改为从PHP的Django认为这会更简单,但这种多表单提交只是简单的恼人。

回答

1

这与多个模型或插入无关。这个问题应该是显而易见的:您拥有一套嵌套的if语句,并且在嵌套最深的位上只有一个return。如果它不是POST,或者表格a无效,或表格p无效,会发生什么情况? Django期望在所有情况下都能返回响应,因此无论发生什么情况,都需要返回。

+0

谢谢!我为我强烈的白痴道歉。系统编程到网络比我原先想象的要困难得多 – user954348

0

我同意丹尼尔的回答,你需要为所有你的分支返回一个响应。

另一个问题是,你没有将AuthorForm绑定到任何数据。在您的代码中,a.is_valid()将始终为False。

而不是

a = AuthorForm() 

你需要像

a = AuthorForm(sdata)