2009-03-17 9 views
13

पर प्रारंभिक मान सेट करें क्या निम्नलिखित संभव बनाने के लिए कोई तरीका है, या इसे कहीं और किया जाना चाहिए?Django फॉर्म, request.user

class JobRecordForm(forms.ModelForm): 
    supervisor = forms.ModelChoiceField(
     queryset = User.objects.filter(groups__name='Supervisors'), 
     widget  = forms.RadioSelect, 
     initial  = request.user # is there some way to make this possible? 
    )  
    class Meta: 
     model = JobRecord 

उत्तर

6

आप इसे अपने व्यू फ़ंक्शन में संभालना चाहते हैं। चूंकि आपके व्यू फ़ंक्शन को प्रारंभिक फ़ॉर्म बनाना होगा, और आपका व्यू फ़ंक्शन उपयोगकर्ता को जानता है।

form = JobRecordForm({'supervisor':request.user}) 

यह, BTW इस इनपुट के सत्यापन को ट्रिगर किया जाएगा, ताकि आप इस तरह से संकेत मान प्रदान नहीं कर सकते।

5

एक Middleware के साथ एक अन्य समाधान देखें और फिर से लिखने को बचाने: मिडलवेयर समाधान आप "अनुरोध" हर जगह फोन कर सकते हैं के साथ ।


"" "Middleware" ""

# coding: utf-8 
from django.utils.thread_support import currentThread 
_requests = {} 

def get_request(): 
    return _requests[currentThread()] 

class GlobalRequestMiddleware(object): 
    def process_request(self, request): 
     _requests[currentThread()] = request 

"" "Rewrinting बचाने" ""

class Production(models.Model): 
    creator = models.ForeignKey(User, related_name = "%(class)s_creator") 
    creation_date = models.DateTimeField(auto_now_add = True) 
    modification_date = models.DateTimeField(auto_now = True) 

    def save(self, force_insert = False, force_update = False): 

     self.creator = get_request().user 
     super(Production, self).save(force_insert = force_insert, force_update = force_update) 
     return 
+0

क्या मुझे यह 'get_request()' विधि का उपयोग करने के लिए कुछ भी आयात करना है? – Throoze

+0

'_request [currentThread()]' में संग्रहीत क्या है? क्या यह 'अनुरोध' ऑब्जेक्ट या इसके मूल्य का संदर्भ है? मैं वास्तव में क्या जानना चाहता हूं: क्या बाद में कोई बदलाव किया जाएगा (उदाहरण के लिए, अन्य मिडलवेयर द्वारा) इस पर परिलक्षित होगा? यदि नहीं, तो क्या इसे 'process_view()' विधि में मिडलवेयर में स्टोर करना बेहतर नहीं होगा? आपको जवाब के लिए धन्यवाद! – Throoze

5

पूरा जवाब के लिए, यहाँ CBV समाधान है:

class MyFormView(TemplateView, FormMixin): 
    def get_initial(self): 
     self.initial.update({'your_field': self.request.user}) 
     return super(MyFormView, self).get_initial() 
संबंधित मुद्दे