2011-09-20 45 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參數讓我們使用指定的形式已經存在的模型。例如,你想更新一個已經存在的數據庫條目。