मेरे पास एक django मॉडल फॉर्म है। प्रपत्र में फ़ील्ड में से एक इमेजफ़िल्ल्ड है जिसमें छवियों को संग्रहीत करने के लिए एक विशिष्ट फ़ोल्डर के लिए एक सेट पथ है। मैं छवि के रूप और नाम के साथ सबमिट की गई छवि को पकड़ना चाहता हूं। मैं चाहता हूं कि छवि स्वयं फ़ोल्डर में संग्रहीत हो और नाम डेटाबेस में स्टोर करने के लिए जब भी मुझे इसकी आवश्यकता हो, इसे पकड़ने में सक्षम हो। मैंने चारों ओर देखा और मेरे लिए इस समस्या को ठीक करने के लिए उपयोगी उत्तर नहीं थे। यहाँ मेरा कोड है:

Model.py:

    user = models.ForeignKey(User, on_delete=models.CASCADE)
    profile_pic = models.ImageField(upload_to='static/images/profile_pics/', height_field=500, width_field=500, max_length=100)
    bio = models.TextField()

दृश्य.py:

        if request.method == "POST":
        form = ProfileForm(request.POST)
        if form.is_valid():
            cd = form.cleaned_data
            first_name = cd['first_name']
            last_name = cd['last_name']
            profile_pic = cd['profile_pic']
            bio = cd['bio']
            new_profile = Profile.objects.create(
                first_name = first_name,
                last_name = last_name,
                bio = bio,
                profile_pic = profile_pic,
                dob = dob,
            )

अनुरोध में यही भेजा गया है:

enter image description here

यहां सीधे उस पथ के साथ है जिसमें मैं छवियों को स्टोर करना चाहता हूं।

enter image description here


अपडेट करें:

यहाँ model.py मॉडल है:

class Profile(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    profile_pic = models.ImageField(upload_to='images/profile_pics/', max_length=100)
    bio = models.TextField()
    dob = models.DateField(auto_now=False, auto_now_add=False)
    phone = models.IntegerField()
    gender = models.CharField(max_length=11)
    company = models.CharField(max_length=22)
    occupation = models.CharField(max_length=22)
    street = models.CharField(max_length=44)
    city = models.CharField(max_length=22)
    state = models.CharField(max_length=4)
    zip_code = models.IntegerField()
    group = models.CharField(max_length=22)
    premium = models.BooleanField(default=False)
    active = models.BooleanField(default=True)
    created = models.DateTimeField(auto_now_add=True)

यहाँ form.py फ़ाइल है:

class ProfileForm(forms.ModelForm):
    first_name = forms.CharField(max_length=22,
        label="First Name")
    last_name = forms.CharField(max_length=22,
        label="Last Name")
    dob = forms.DateField(
        label='Date of Birth',
        widget=forms.widgets.DateInput(attrs={'type':'date'})
    )
    gender_choices = (('M', 'Male'),
                      ('F', 'Female'),
                      ('O', 'Other'))
    gender = forms.TypedChoiceField(
        choices = gender_choices,
        label='Gender')
    class Meta:
        model = Profile
        fields = ['first_name', 'last_name', 'profile_pic', 'bio', 'dob', 'company',
                  'occupation', 'gender', 'phone', 'street', 'city', 'state', 'zip_code']

यहाँ टेम्पलेट है:

प्रोफाइल:

<form method="POST">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" name="complete" value="complete">
</form>
0
Omar Jandali 7 जून 2018, 15:32

1 उत्तर

सबसे बढ़िया उत्तर

Upload_to पैरामीटर "मीडिया" फ़ोल्डर के अंदर सापेक्ष पथ को संदर्भित करता है, यह रूट पथ से संबंधित नहीं है। इसे काम करने के लिए, पहले आपको अपनी सेटिंग्स में मीडिया रूट निर्दिष्ट करना होगा और फिर नीचे दिया गया पथ django को सभी अपलोड की गई छवियों को /media/images/profile_pics/ पर डालने के लिए कहेगा।

अपलोड_टू संदर्भ

profile_pic = models.ImageField(upload_to='images/profile_pics/', height_field=500, width_field=500, max_length=100)

छवियों को सहेजने के लिए फॉर्म के लिए आपको फाइलों के साथ अपना फॉर्म भी देना होगा।

# this way the form have access to the file uploaded in the buffer
form = ProfileForm(request.POST, request.FILES)    
1
Du D. 7 जून 2018, 15:49