2009-01-05 7 views
12

मेरे पास उपयोगकर्ता नाम नामक फ़ील्ड के साथ एक मॉडल प्रश्न है, एक प्रश्न पूछने से पहले, मुझे लॉगिन करने की आवश्यकता है, मैं चाहता हूं कि वर्तमान में लॉग-इन किए गए उपयोगकर्ता की उपयोगकर्ता आईडी को कैप्चर करने के दौरान सहेजना और उसे उपयोगकर्ता के उपयोगकर्ता को असाइन करना प्रश्न मॉडलमैं django में फ़ील्ड को स्वतः कैसे पॉप्युलेट कर सकता हूं?

कृपया ध्यान दें कि मेरे मॉडल पर उपयोगकर्ता आईडी नहीं दिखा रहा है यानी प्रश्न मॉडल में मैंने उपयोगकर्ता आईडी को निम्नानुसार घोषित किया है;

वर्ग प्रश्न (models.Model): ... userid = models.ForeignKey (उपयोगकर्ता, संपादन योग्य = false) ...

असाइन कैसे मैं प्रश्न मॉडल के लिए लॉग इन हुए प्रयोक्ता आईडी है उपयोगकर्ता आईडी?

+0

एक sidenote के रूप में, यह "उपयोगकर्ता" के बजाय अपने क्षेत्र "उपयोगकर्ता" को कॉल करने के लिए और अधिक समझदार और स्पष्ट होगा; क्योंकि विशेषता वास्तव में उपयोगकर्ता ऑब्जेक्ट को संदर्भित करती है, न कि आईडी संख्या। Django स्वचालित रूप से '_id' संलग्न के साथ डीबी क्षेत्र बना देगा; इसलिए आपके पास अब यह है कि "userid_id" है। –

उत्तर

11

आपका कोड ऐसा दिखाई हो सकता है: ध्यान में रखने की

from django.contrib.auth.decorators import login_required 

class QuestionForm(forms.ModelForm): 
    class Meta: 
     model = Question 

@login_required 
def ask(request): 
    form = QuestionForm(request.POST) 

    if form.is_valid(): 
     question = form.save(False) 
     question.userid = request.user 
     question.save() 

    #... 
+1

धन्यवाद! एक समान प्रश्न पोस्ट करने वाला था, लेकिन इसने इसे हल किया – f4nt

0

एक बात तथ्य यह है कि आप के आसपास की हैकिंग के बिना आप मॉडल से अनुरोध वस्तु (और इसलिए वर्तमान उपयोगकर्ता) उपयोग नहीं कर सकते है django की डिजाइन बाधाओं।

इसलिए बनाई गई चाल जैसे स्वचालित रूप से पॉप्युलेटिंग फ़ील्ड जैसे स्वच्छ_बी और अपडेटेड_बी Django से काम नहीं करते हैं। @Daevaorn द्वारा दिखाए गए अनुसार आपको अपने विचारों में मैन्युअल रूप से ऐसे फ़ील्ड सेट करना होगा।

2

This blog एंट्री (जेम्स बेनेट द्वारा) आपके लिए भी उपयोगी साबित हो सकता है ... यह लगभग वही करने का तरीका बताता है जो आपको चाहिए।

0

हाल के लिए - और अद्यतन होने की संभावना - संसाधन, मैं आधिकारिक Django दस्तावेज़ीकरण की अनुशंसा करता हूं। यह बहुत ही उदाहरण यह व्यवस्थापक प्रलेखन के ModelAdmin तरीकों खंड में जिस तरह से है बना दिया है: https://docs.djangoproject.com/en/1.6/ref/contrib/admin/#modeladmin-methods

तुम मुझे पसंद कर रहे हैं, तो आप सिर्फ इतना है कि उदाहरण हड़पने और चलाने के लिए परीक्षा हो जाएगा, लेकिन आप धीमा से लाभ हो सकता , कुछ मिनट ले रही है पढ़ने के लिए, और फिर लागू करने - मैं निश्चित रूप से होता है ...

ध्यान दें कि मैं 1.6 की ओर इशारा किया, लेकिन पृष्ठ के निचले दाहिने हाथ कोने में एक गतिशील चयनकर्ता सकता है जो आपको अपने संस्करण का चयन । (ये भयानक दस्तावेज़ मुझे रेल से Django को धक्का दे रहे हैं!)

संबंधित मुद्दे

 संबंधित मुद्दे