2012-07-25 17 views
5

मैं सर्वोत्तम अभ्यास की तलाश कर रहा हूं, लेकिन मुझे यह नहीं मिला। मैं समाधान ढूंढने में भी असमर्थ था जिसे मुझे किसी और द्वारा उपयोग की ज़रूरत है।अन्य क्षेत्रों के आधार पर Django में उपयोगकर्ता मॉडल में उपयोगकर्ता नाम स्वचालित रूप से

मैं करने की जरूरत है उसके अन्य डेटा (प्रथम & अंतिम नाम नाम) के आधार पर उपयोगकर्ता के उपयोगकर्ता नाम उत्पन्न, वैकल्पिक रूप से अंत में पूर्णांक जोड़कर, जब तक मैं अद्वितीय उपयोगकर्ता नाम मिलता है।

मैं दृढ़ता से मॉडल में ऐसा करना पसंद करता हूं। क्या ऐसा करने का कोई मानक तरीका है? या यह केवल रूपों में उपयुक्त है? मैं विभिन्न User मॉडल विधियों के साथ-साथ सिग्नल के ओवरलोडिंग का शोध कर रहा हूं, और मुझे कोई उचित स्थान नहीं मिला जो मैं इसे जोड़ सकता था।

उत्तर

4

एक संभावित समाधान pre_save सिग्नल के माध्यम से हो सकता है।

def my_callback(sender, **kwargs): 
    obj = kwargs['instance'] 
    if not obj.id: 
     username = get_unique_username(obj) # method that combines first name and last name then query on User model, if record found, will append integer 1 and then query again, until found unique username 
     obj.username = username 
pre_save.connect(my_callback, sender=User) 
+0

मैं इसका उपयोग करने के बारे में सोच रहा था, लेकिन मुझे इस बात से चिंतित है कि वास्तव में इसके साथ कौन से फॉर्म होंगे। फॉर्म 'सेव() 'पर कॉल करने से पहले इनपुट मान्य करते हैं, इसलिए फ़ील्ड को अमान्य माना जाएगा। Btw। 'obj.save() '' pre_save' सिग्नल भी कॉल करेगा, इसलिए मुझे शायद इसे हटा देना चाहिए (या किसी अन्य चीज के साथ प्रतिस्थापित करें)। – Tadeck

+0

आपका समाधान काम करता है, लेकिन हमेशा नहीं (अगर सत्यापन को सहेजने से पहले संभाला जाता है, तो हम भाग्य से बाहर हैं) और समायोजन की आवश्यकता है ('obj.save()' को हटाने, और 'get_unique_username' को भी काम करना चाहिए यदि हम मौजूदा मॉडल को अपडेट कर रहे हैं) । आम तौर पर मुझे लगता है कि ऐसा करने का कोई बेहतर तरीका नहीं है, इसलिए आपका उत्तर स्वीकार्य है। धन्यवाद। – Tadeck

+0

@Tadeck उत्तर देखें, अब यह आपके पॉइंट इश्यू को संभालता है। – Ahsan

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