2011-11-18 12 views
15

मैं एक मॉडल में एक फ़ील्ड बनाने की कोशिश कर रहा हूं, जो एक पंजीकृत उपयोगकर्ता के लिए एक छवि स्टोर करना चाहिए। इस छवि का नाम बदलकर media/users/10/photo.jpeg जैसी अलग उपयोगकर्ता निर्देशिका में संग्रहीत किया जाना चाहिए।मॉडल में Django स्टोर उपयोगकर्ता छवि

मैंने बहुत कुछ खोजा है, लेकिन अभी भी यह साफ-सुथरा और सही तरीके से कैसे नहीं किया जा सकता है। ऐसा लगता है कि कई साइटों को एक ही कार्यक्षमता की आवश्यकता होती है और यह django दस्तावेज़ों में होना चाहिए, लेकिन ऐसा नहीं है।

+0

आप हर उपयोगकर्ता आईडी के लिए एक निर्देशिका बना रहे हैं? क्यों नहीं 'मीडिया/उपयोगकर्ता/10.jpeg'? बस पूछना: डी –

+0

क्योंकि स्टोर करने के लिए अन्य उपयोगकर्ता से संबंधित सामग्री हो सकती है :) – dragoon

+0

ओह मैं देखता हूं! मुझे लगता है कि मुझे एक ही समस्या का सामना करना पड़ा है, मुझे देखने दो कि क्या मैं –

उत्तर

35

आप इस कोड को मेरा एक परियोजना से सीधे है एक ImageField

#models.py 
import os 

def get_image_path(instance, filename): 
    return os.path.join('photos', str(instance.id), filename) 

class UserProfile(models.Model): 
    user = models.ForeignKey(User, unique=True) 
    profile_image = ImageField(upload_to=get_image_path, blank=True, null=True) 

पर "upload_to" विकल्प का उपयोग करना चाहते हैं। अपलोड की गई छवि आप क्या चाहते हैं के लिए /MEDIA_ROOT/photos/<user_id>/filename

को जाता है, बस def get_image_path

यहाँ में करने के लिए 'उन' 'तस्वीरें' स्ट्रिंग बदल रहा है डॉक्स में इसके बारे में छोटा-सा, FileField विवरण के तहत

+0

कूल , यह वास्तव में फ़ाइल को सही स्थान पर सहेजता है, लेकिन जब मैं टेम्पलेट '' {{user.profile_image}} में उपयोग करता हूं, तो इसे किसी कारण से ''/उपयोगकर्ता/उपयोगकर्ता/40/photo.png'' ' '/ media/users/40/photo.png'' – dragoon

+1

क्षमा करें, मुझे' '{{user.profile_image.url}}' ' – dragoon

+3

मॉडल का उपयोग करना चाहिए था। ForeignKey (उपयोगकर्ता, अद्वितीय = सही) मॉडल होना चाहिए। OneToOneField (उपयोगकर्ता) – vinyll

0

आपको ऐसे मॉडल को बनाने की आवश्यकता होगी जिसमें उपयोगकर्ता मॉडल के लिए एक विदेशी कुंजी हो, जहां आप उपयोगकर्ता के लिए image field रख सकें। मैं उपयोगकर्ता मॉडल को संशोधित करने की अनुशंसा नहीं करता।

+2

की मदद कर सकता हूं, मुझे खेद है, लेकिन सवाल मॉडल के बारे में नहीं है, यह छवियों को स्टोर करने के तरीके के बारे में है। – dragoon

+1

आप किसी भी फ़ाइलफाइल या छवि फ़ील्ड के लिए एक गतिशील अपलोड पथ बना सकते हैं। बस अपने मॉडल में एक फ़ंक्शन जोड़ें जो upload_to के लिए पथ लौटाता है। आप Django दस्तावेज़ों में एक उदाहरण यहां प्राप्त कर सकते हैं: https://docs.djangoproject.com/en/1.3/ref/models/fields/#filefield – Brandon

+1

सबसे अच्छा जवाब नहीं है, लेकिन नीचे वोट के लायक नहीं है ... – nicorellius

1

मैं आपको django-photologue में देखने का सुझाव देता हूं। यह सभी छवि प्रबंधन, अपलोडिंग और भंडारण के साथ पहले से ही एक django ऐप है! के बारे में

अधिक पर: http://code.google.com/p/django-photologue/

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