2014-10-04 25 views
0

我想創建一個餐廳評論提交頁面,其中提交評論的用戶的用戶名保存在數據庫表中。我想我必須重寫CreateView的保存方法,但我不知道如何。如何將當前登錄的用戶名保存在Django的CreateView提交操作中?

這是我到現在爲止。

views.py

class WriteReview(CreateView): 
    model = Review 
    success_url = reverse_lazy('restaurant_list') 
    fields = ['restaurant','review'] 

models.py

class Review(models.Model): 
    restaurant = models.ForeignKey('Restaurant') 
    review = models.TextField() 
    user = models.CharField(default='', max_length=100) 
    time = models.DateTimeField(auto_now_add=True) 

    def __str__(self): 
     return "%s review: %s..." % (self.restaurant, self.review[:20]) 
+0

我通過自定義form_valid方法解決了這個問題。這裏是代碼: def form_valid(self,form): form.instance.user = self.request.user return super(WriteReview,self).form_valid(form) – MiniGunnR 2014-10-04 16:41:02

回答

1

我改變了我的類自定義方法添加到它像下面這樣。

class WriteReview(CreateView): 
    model = Review 
    success_url = reverse_lazy('restaurant_list') 
    fields = ['restaurant','review'] 

    def form_valid(self, form): 
     form.instance.user = self.request.user 
     return super(WriteReview, self).form_valid(form) 

這樣做的竅門! :)

1

至於你說你的答案的作品,但它將使更多的意義來寫你的模型是這樣的(代碼假定您已經導入了User型號:

class Review(models.Model): 
    restaurant = models.ForeignKey('Restaurant') 
    review = models.TextField() 
    user = models.ForeignKey(User) 
    time = models.DateTimeField(auto_now_add=True) 

現在表實際上與User之一,因此用戶詳細信息的更改將傳播到Review模型,然後您可以利用方便的快捷方式(例如點符號)訪問Review實例中的User屬性,或者查看所有任何用戶實例,我們將調用我們的u,評論用u.review_set.all()。你仍然會將用戶設置爲th e提交form_valid方法的表單,如下所示:

class WriteReview(CreateView): 
... 

    def form_valid(self, form): 
     self.object = form.save(commit=False) 
     self.object.user = self.request.user 
     self.object.save() 
     return HttpResponseRedirect(self.get_success_url()) 
+0

很高興你提起它,因爲我試圖找到一個答案。但是,我想在使用泛型CreateView時創建ForeignKey關係。你的代碼可能嗎?或者我還需要修補我的視圖課程? – MiniGunnR 2014-10-05 09:08:19

+0

我想知道,什麼時候有一個ForeignKey關係,不是Django保存用戶的ID而不是用戶名本身?所以,如果我堅持我的原始代碼,但將form_valid方法的第一行更改爲:form.instance.user = self.request.user.id,它不起作用嗎? – MiniGunnR 2014-10-05 09:17:20

+0

我從來沒有這樣做過,我現在不在我的開發機器上查看,但試試看,我看不出有什麼傷害。 – 2014-10-05 09:19:55

相關問題