दुर्भाग्यवश, यह ब्राउज़र द्वारा लगाई गई एक समस्या (वास्तव में एक सुरक्षा सुविधा) है, और इस तरह हल नहीं है। ब्राउज़र आपको फ़ाइल इनपुट के लिए प्रारंभिक मान निर्दिष्ट नहीं करने देंगे, और ऐसा कुछ भी नहीं है जिससे आप इसके आसपास काम करने में सक्षम होंगे।
कारण यह है कि यदि कोई वेबसाइट ऐसा कर सकती है, तो यह एक वेक्टर खोल देगा जो किसी भी वेबसाइट को फ़ाइल पथ का अनुमान लगाकर आपके कंप्यूटर पर किसी भी फाइल को चोरी करने की अनुमति देगा - वे सिर्फ पृष्ठभूमि में एक स्क्रिप्ट चल सकते हैं दिलचस्प फ़ाइलों को सर्वर पर वापस पोस्ट करने का प्रयास किया।
केवल वैकल्पिक हल वास्तव में सर्वर पर अपलोड की गई फ़ाइल प्रपत्र मान्य करता है, चाहे को बचाने के लिए है, और फिर जब आप फार्म और त्रुटियों वापस उपयोगकर्ता के प्रस्तुत करना, संकेत मिलता है कि आप एक फ़ाइल प्राप्त किया है और है कि वे केवल चाहिए इसे बदलने के लिए उस फ़ील्ड को भरें।
class CustomClearableFileInput(ClearableFileInput):
def render(self, name, value, attrs=None):
if len(<YourModel>.objects.filter(id=self.form_instance_id))>0:
file = <YourModel>.objects.get(id=self.form_instance_id).<yourField>
else:
file = ''
substitutions = {
'initial_text': self.initial_text,
'input_text': self.input_text,
'clear_template': '',
'clear_checkbox_label': self.clear_checkbox_label,
}
template = '%(input)s'
substitutions['input'] = super(ClearableFileInput, self).render(name, value, attrs)
self.template_with_initial = ('<p class="file-upload">%s</p>'
% self.template_with_initial)
self.template_with_clear = ('<span class="clearable-file-input">%s</span>'
% self.template_with_clear)
if value and hasattr(value, "url"):
template = self.template_with_initial
substitutions['initial'] = format_html(self.url_markup_template,
value.url,
force_text(value))
if not self.is_required:
checkbox_name = self.clear_checkbox_name(name)
checkbox_id = self.clear_checkbox_id(checkbox_name)
substitutions['clear_checkbox_name'] = conditional_escape(checkbox_name)
substitutions['clear_checkbox_id'] = conditional_escape(checkbox_id)
substitutions['clear'] = CheckboxInput().render(checkbox_name, False, attrs={'id': checkbox_id})
substitutions['clear_template'] = self.template_with_clear % substitutions
url = '' if file == '' else file.url
else:
template = self.template_with_initial
substitutions['initial'] = format_html(self.url_markup_template,
url,
force_text(file))
if not self.is_required:
checkbox_name = self.clear_checkbox_name(name)
checkbox_id = self.clear_checkbox_id(checkbox_name)
substitutions['clear_checkbox_name'] = conditional_escape(checkbox_name)
substitutions['clear_checkbox_id'] = conditional_escape(checkbox_id)
if fav == '':
substitutions['clear'] = CheckboxInput().render(checkbox_name, False, attrs={'id': checkbox_id, 'disabled': 'disabled'})
else:
substitutions['clear'] = CheckboxInput().render(checkbox_name, False, attrs={'id': checkbox_id})
substitutions['clear_template'] = self.template_with_clear % substitutions
return mark_safe(template % substitutions)
और फिर अपने रूप में आप लिखना चाहिए:
class <YourModel>Form(ModelForm):
class Meta:
model = <YourModel>
fields = '__all__'
widgets= {'<YourField>': CustomClearableFileInput}
def __init__(self, *args, **kwargs):
super(OperatorSettingsForm, self).__init__(*args, **kwargs)
self.fields['<YourField>'].widget.form_instance_id = self.instance.id
यह मेरे लिए काम करता
यदि आप django व्यवस्थापक को देखते हैं, जब भी आप गलत फॉर्म सबमिट करते हैं तो यह फ़ाइल पथ को रीसेट करता है। मुझे लगता है कि ऐसा करने का कोई तरीका नहीं है लेकिन क्यों अपने एचटीएमएल में फ़ाइल फ़ील्ड को हाइलाइट नहीं करना है? – iva123
हां, शायद उपयोगकर्ता के ध्यान को कॉल करने का सबसे आसान तरीका होगा। धन्यवाद! – Sam