Django मॉडल में फ़ील्ड के लिए डिफ़ॉल्ट मान


100

मान लीजिए मेरे पास एक मॉडल है:

class SomeModel(models.Model):
    id = models.AutoField(primary_key=True)
    a = models.CharField(max_length=10)
    b = models.CharField(max_length=7)

वर्तमान में मैं इस प्रकार की वस्तुओं को बनाने / संपादित करने के लिए डिफ़ॉल्ट व्यवस्थापक का उपयोग कर रहा हूं। मैं bव्यवस्थापक से फ़ील्ड को कैसे निकालूं ताकि प्रत्येक ऑब्जेक्ट को एक मान के साथ नहीं बनाया जा सके, और इसके बजाय एक डिफ़ॉल्ट मान प्राप्त होगा 0000000?

जवाबों:


155

अपने डिफ़ॉल्ट मान पर सेट editableकरें Falseऔर करें default

http://docs.djangoproject.com/en/stable/ref/models/fields/#editable

b = models.CharField(max_length=7, default='0000000', editable=False)

साथ ही, आपका idक्षेत्र अनावश्यक है। Django इसे स्वचालित रूप से जोड़ देगा।


22

आप इस तरह से डिफ़ॉल्ट सेट कर सकते हैं:

b = models.CharField(max_length=7,default="foobar")

और फिर आप अपने मॉडल के व्यवस्थापक वर्ग के साथ फ़ील्ड को इस तरह छिपा सकते हैं:

class SomeModelAdmin(admin.ModelAdmin):
    exclude = ("b")

21

आप डिफ़ॉल्ट फ़ील्ड में कॉल करने योग्य का उपयोग भी कर सकते हैं, जैसे:

b = models.CharField(max_length=7, default=foo)

और फिर कॉल करने योग्य परिभाषित करें:

def foo():
    return 'bar'

4
यह 1.8 में काम नहीं करता है, हालांकि प्रलेखन यह संकेत देता है कि यह होना चाहिए। foo()कक्षा विधि होनी चाहिए?
टूथलेसरेल

3
आपको @staticmethodfoo फंक्शन के आसपास रैपर सेट करना पड़ सकता है ।
नशे की लत
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.