2013-07-24 3 views
0

객체, 특히 ModelForms장고의 CreateView 내가 장고의 일반적인 견해를 연습하고있어

이 내 뷰와 모델

models.py

class Post(models.Model): 
    user = models.ForeignKey(User) 
    post_title = models.CharField(max_length=200) 
    post_content = models.CharField(max_length=500) 
    post_date = models.DateTimeField('date posted') 

    def get_absolute_url(self): 
     return reverse('user-detail', kwargs={'pk': self.pk}) 

    def __unicode__(self): 
     return self.post_title 

forms.py있는 저장되지 않는다

class PostForm(forms.ModelForm): 
    post_title = forms.CharField(
     label=u'Title', 
     widget=forms.TextInput(attrs={'size':64}) 
    ) 
    post_content = forms.CharField(
     label=u'Content', 
     widget=forms.TextInput(attrs={'size':128}) 
    ) 
    class Meta: 
     model = Post 

views.py는

class PostCreate(CreateView): 
    fields = ['post_title', 'post_content'] 
    template_name = 'app_blog/post_save_form.html' 
    model = Post 
    form_class = PostForm 

    @method_decorator(login_required) 
    def dispatch(self, *args, **kwargs): 
     return super(PostCreate, self).dispatch(*args, **kwargs) 

    def form_valid(self, form): 
     self.object = form.save(commit=False) 
     self.object.user = self.request.user 
     self.object.post_date = datetime.now() 
     return super(PostCreate, self).form_valid(form) 

보기는 오류를 표시하지, 잘 작동하는 것 같다. 그러나 양식을 제출하고 게시물을 저장 한 후 Django 관리자 페이지를 확인할 때 어떤 이유로 든 게시물이 데이터베이스에 저장되지 않습니다.

왜 이런 일이 발생하는지 알고 싶습니다.

+0

어떤 형태의 오류가 있습니까? – lalo

답변

1

시도해보십시오. 난 당신의 코드에서 볼 수 있듯이

def form_valid(self, form): 
    form.instance.user = self.request.user 
    form.instance.post_date = datetime.now() 
    return super(PostCreate, self).form_valid(form) 
4

당신은 그 객체가 데이터베이스에 저장되지 않습니다 의미

self.object = form.save(commit=False) 

를 사용하지만, 당신은 학습과 처리를 위해 사용할 수 있습니다. 따라서 다음과 같이 사용해야합니다 :

self.object = form.save(commit=False) # Not hit database 
self.object.user = self.request.user # Update user 
self.object.post_date = datetime.now() # Update post_date 
self.object.save() # And finally save your object to database. 
+0

작은 수정 self.object.save()가 아니라 self.obejct.save(). 하지만 당신은 대답이 옳습니다. – nnmware

+0

@nnmware 작은 수정은 [edit] (http://stackoverflow.com/posts/17835949/edit) 기능을 사용하여 적용 할 수 있습니다. 다른 사람들의 대답을 편집하는 것이 좋습니다. 소중한 편집물을 제안한 평판 포인트를 얻을 수 있습니다. –