2017-08-24 5 views
0

現在ログインしているユーザーをフォームにデフォルトとして渡すにはどうすればよいですか?現在ログインしているユーザーをフォームにデフォルトで渡す方法

フォームを現在のユーザーで事前入力すると同時に、ユーザーに変更を許可する(たとえば、別のユーザーの顧客を追加する)ことができます。

class Customer (models.Model): 

    shortname = models.CharField(max_length=30) 
    name = models.CharField(max_length=50, blank=True) 
    [...] 
    user = models.ForeignKey(User) 
    nextstep = models.DateField(auto_now=False, auto_now_add=False, default=(date.today() + timedelta(days=10))) 

    def due_in(self): 

     due_time = self.nextstep - date.today() 
     overdue = due_time.days < 0 
     return {'days': abs(due_time.days), 'overdue': overdue} 

    def get_absolute_url(self): 
     """Absolute URL des Partners""" 
     return reverse('kundencenter:partner_detail', kwargs={'pk': self.pk}, current_app='kundencenter') 

そして、私のフォーム::

class CustomerForm(forms.ModelForm): 

    class Meta: 
     model = Customer 
     fields = [ 
      "shortname", 
      "name", 
      [...] 
      "user", 
     ] 

     labels = { 
      "shortname": 'Customer Shortname', 
      "name": 'Full Name', 
      } 

そして、私のビュー:

は、ここに私のモデルである

class CustomerCreateView(SuccessMessageMixin, CreateView): 
    """Adds a new customer.""" 
    model = Customer 
    template_name = 'customercenter/generic_new.html' 
    form_class = CustomerForm 
    success_message = "Customer %(name)s added." 
+0

はあなたのビューを表示してください機能やデコレータ – pije

+0

保存に使用してみてください。 – Alasdair

答えて

1

Arpit Solankiの答えを拡張しますが、クラスベースビューを使用しているので、あなたがget_initialメソッドをオーバーライド/追加することができます。

def get_initial(self): 
    initial_data = super(CustomerCreateView, self).get_initial() 
    initial_data.update({'user':self.request.user}) 
    return initial_data 
+0

どこからでもコードを書くことができます。コンパクトで甘い –

+0

これは素晴らしいです、ありがとう!魅力のように働きエレガントです。 1つの注:スーパーファンクションは、フォーム(CustomerForm)ではなく、ビュー(CustomerCreateView)を取ります。 – Harper

4

フォームをレンダリングしながら、あなたはあなたの形式で初期使用することができます。

form = CustomerForm(initial={'user':request.user}) 

詳細はdocsを参照してください。

関連する問題