/ / Django में, आप कैसे एक ModelForm का उपयोग कर मूल्यों की एक सूची के रूप में एक मॉडल क्षेत्र में कई फार्म फ़ील्ड बचा सकते हैं? - django, django- मॉडल, django- रूप

Django में, मॉडल मॉडल का उपयोग करके मूल्यों की सूची के रूप में आप एक से अधिक फ़ील्ड फ़ील्ड्स को एक मॉडल फ़ील्ड में कैसे सहेजते हैं? - django, django-model, django-form

दिया हुआ:

from django.db import models
class MyModel(models.Model):
...
owners = models.CharField(max_length=255, blank=False)

कहा पे owners ईमेल पतों की एक अलग-अलग सूची है।

पृष्ठ में, कई हैं <input> उसी के साथ खेतों name, इसलिए सर्वर को ऐरे में मान मिलते हैं।

फॉर्म के लिए एचटीएमएल कोड हाथ से बनाया गया था और बिल्ट-इन टेम्प्लेट का उपयोग नहीं करता था (जैसे कि form.as_p)।

कर सकते हैं Django के ModelFormकुछ इस तरह से संभाल?

मॉडल को पुनर्प्राप्त करते समय डेटा परिवर्तन को संभालने के लिए उचित स्थान क्या है (क्या मुझे एक कस्टम बनाना है models.Manager?) और जब इसे बचाने (जो save() विधि क्या मैं ओवरराइड करता हूं? Model“या है ModelForm"रों)?

- वर्गीकरण के लिए आवेदन -

डेटाबेस में:

+-----+---------------------------+-----+
| ... |           owners          | ... |
+-----+---------------------------+-----+
| ... | "a@a.com|b@b.com|c@c.com" | ... |
+-----+---------------------------+-----+

फार्म:

<form ... >
...
<input type="text" name="owners" />
<input type="text" name="owners" />
<input type="text" name="owners" />
...
</form>

उत्तर:

जवाब के लिए 8 № 1

आप उपयोग कर सकते हैं forms.MultiValueField तथा forms.MultiWidget. MultiValueField जानता है कि आपके मॉडल के एक क्षेत्र में कई असतत मूल्य और हैं MultiWidget विजेट जानता है कि प्रत्येक असतत मूल्य कैसे प्रस्तुत किया जाना चाहिए। वे आपके क्षेत्रों के लिए विशिष्ट नाम बनाने का काम करेंगे ताकि वे फॉर्म को फिर से बना सकें POST मान और आपने "किसी भी प्रकार के तरीकों को ओवरराइड करना है जो कार्यान्वयन प्रदान करते हैं, यानी आपने जीता" टी को ओवरराइड करना है save().

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

आदर्श रूप से, आप चाहते हैं कि ए PipedEmailAddressesField वह फैलता है CharField आपके मॉडल के क्षेत्र के रूप में, एक को पता है कि यह पाइप ईमेल पते को संग्रहीत करना है। यह इसका निर्माण करने में सक्षम होना चाहिए MultiValueField फार्म का मैदान जो बदले में इसे उपयुक्त होना चाहिए MultiWidget खेत।


उत्तर № 2 के लिए 1

यहाँ एक मॉडल को एक दृश्य में सहेजने का एक उदाहरण है: http://themorgue.org/blog/2008/05/14/django-and-modelform/ आप मैन्युअल रूप से उपयोग करके अतिरिक्त फ़ील्ड प्राप्त कर सकते हैं request.POST["fieldname"] उम्मीद है कि यह मदद की।