2011-09-20 15 views
0

我很抱歉在一天之内提出两个有关类似主题的问题,但我对django的noobishness刚刚完全接管。基本上我有两个型号:Django inlineformsets和一般noobishness

class Story(models.Model): 
    title = models.CharField(max_length=1000) 
    text = models.CharField(max_length=5000) 
    date = models.DateField(default=datetime.date.today, editable=False) 
    likes = models.IntegerField(default='0') 
    dislikes = models.IntegerField(default='0') 
    views = models.IntegerField(default='0') 
    author = models.ForeignKey('Author', related_name="username") 

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

,你可以的想法是,有人提出一个故事,他们的名字进入了笔者的表。很简单的东西。我的问题是创建一个表单,允许用户提交他们的故事和他们的名字。我试过了一个inlineformset,没有运气,我只是找不到一种方法来执行我所知道的只是幕后的一个简单的AND sql语句。

这里是我的形式模型: StoryAuthorFormSet = inlineformset_factory(作者,故事)

class StoryForm(ModelForm): 
     class Meta: 
      model = Story 
      exclude = ('date', 'views', 'likes', 'dislikes', 'author') 

,这里是我的观点

def submit_story(request): 
if request.method == 'POST': 
    form = StoryForm(request.POST) 
    if form.is_valid: 
     #watch this nest part be aware of the author bit 
     author = form.save(commit=False) 
     story = StoryAuthorFormSet(request.POST, instance=author) 
     if author_formset.is_valid(): 
      story.save() 
      author_formset.save() 
      return HttpResponseRedirect('/thanks/') 
else: 
    form = StoryForm() 
    author_formset = StoryAuthorFormSet(instance=Author()) 
    return render_to_response('submit/submit_story.html', locals(), context_instance=RequestContext(request)) 

我意识到可能是他们的是一个简单的解决方案,我已经错过了...但我很难过,任何想法都将非常感激.....所以我会为任何需要它的人做一些免费的Clojure和Erlang编程!

+0

首先,请为您以前的问题选择一个答案。 –

回答

1

您的示例中不需要内联formset。只有当我需要为给定的作者一次提交几个故事时,我才会使用它。

此外还有些事情我会改变你的模型。

title = models.CharField(max_length=1000) 
text = models.CharField(max_length=5000) 

一个TextField可能更合适,至少在文本部分。

我会这样解决它: 创建一个AuthorForm并在相同的视图中使用该和您现有的StoryForm

因此,逻辑是以下几点:

author_form = AuthorForm(request.POST) 
if author_form.is_valid(): 
    author = author_form.save() 
    story_form = StoryForm(request.POST) 
    if story_form.is_valid(): 
     story = story_form.save(commit=False) 
     story.author = author 
     story.save() 

instance参数让我们使用指定的形式已经存在的模型。例如,你想更新一个已经存在的数据库条目。