Django "xxxxxx ऑब्जेक्ट" व्यवस्थापक कार्रवाई साइडबार में अनुकूलन प्रदर्शित करता है


110

मैं डिफ़ॉल्ट व्यवहार में बदलाव करना चाहूंगा कि कैसे हाल ही में परिवर्तन किए गए साइडबार में "ऑब्जेक्ट्स" का नाम जोड़ा गया है। नीचे दी गई तस्वीर देखें:

हाल के कार्यों के मॉड्यूल में, यह "MyModelName ऑब्जेक्ट" के रूप में नई वस्तुओं को भी दिखाता है

मैं यह बदलना चाहूंगा कि इनका नाम एडमिन में कैसे रखा गया है। आदर्श रूप में, मैं इसे "MyModelName ऑब्जेक्ट" से "नीति" ऑब्जेक्ट उदाहरण में, "पॉलिसी: {{पॉलिसी का नाम" पॉलिसी नाम "फ़ील्ड} की तरह कुछ" में बदल सकता हूं।

मैं सोच रहा था कि __unicode__मेरे पेशेंट मॉडल ने इसे संभाला, लेकिन यह सामने नहीं आया। किसी भी सहायता की सराहना की है।


1
__unicode__वह करता है। अपना कोड पेस्ट करें ताकि हम देख सकें कि क्या गलत है
दान-क्लेसन

__unicode__पाइथन 3 में मेरे लिए काम नहीं किया। हालांकि, __str__नीचे दिए गए जवाब में प्रलेखित के रूप में काम किया
दान राजा

जवाबों:


168

__unicode__वह करता है। आपके मॉडल को कुछ इस तरह दिखना चाहिए:

class SomeModel(models.Model):
    def __unicode__(self):
       return 'Policy: ' + self.name

अजगर 3 पर आपको उपयोग करने की आवश्यकता है __str__:

def __str__(self):
   return 'Policy: ' + self.name

1
मैं मूर्खता से यह नहीं देखता था कि मैं हर मॉडल के लिए यूनिकोड के तरीकों की घोषणा करता / करती हूं। : doh: क्षमा करें।
23

29

__str__Python3 और Django1.8 पर विधि का उपयोग करना :

class MyModel(models.Model):

    name = models.CharField(max_length=60)

    def __str__(self):
        return 'MyModel: {}'.format(self.name)

3
यह मेरे लिए भी हल हो गया। मैं Python3 और Django1.8 का भी उपयोग करता हूं।
टोडोर स्कॉरपैन

str पुराना तरीका है ..... फिर भी Django के साथ अजगर 3, नया तरीका ( यूनिकोड ) काम नहीं करता है?
user798719

13

आपके द्वारा देखी जा रही स्ट्रिंग __unicode__विधि से आ रही है , जैसा कि अन्य ने उल्लेख किया है। लेकिन बात यह है कि व्यवस्थापक लॉग इवेंट बनाते समय किसी ऑब्जेक्ट के स्ट्रिंग प्रतिनिधित्व को बचाता है, इसलिए यदि आप __unicode__लॉग प्रविष्टि सहेजे जाने के बाद कार्यान्वयन जोड़ते हैं, तो आपको कुछ नई गतिविधि करने के बाद ही पुराने आइटम पर नए शीर्षक दिखाई नहीं देंगे।


मैं बस सोच रहा था कि यूनिकोड सेट करने के बाद ऐक्ट्स लॉग क्यों नाम नहीं दिखा रहा था - मुझे पता होना चाहिए कि यह सिर्फ एक लॉग था जिसे db में स्टोर किया गया था जो कि निर्माण के समय डेटा ले रहा था!
markwalker_

2
धन्यवाद, अगर आपने समझाया नहीं तो मुझे बहुत बड़ी परेशानी होती
dtc

7

उल्लेख करने के तरीके __str__और __unicode__तरीके सही हैं। हालांकि डॉक्स में कहा गया है , संस्करण 1.6 (मुझे लगता है) के बाद से, आप पायथन 2 और पायथन 3 दोनों केpython_2_unicode_compatible लिए डेकोरेटर का उपयोग कर सकते हैं :

from __future__ import unicode_literals
from django.utils.encoding import python_2_unicode_compatible

@python_2_unicode_compatible
class MyClass(models.Model):
    def __str__(self):
        return "Instance of my class"

आप गैर- Modelवस्तुओं में भी उपरोक्त का उपयोग कर सकते हैं ।


3

आपको यह परिभाषित करने की आवश्यकता है कि आप किस कॉलम को प्रदर्शित करना चाहते हैं ...

उदाहरण के लिए:

class POAdmin(admin.ModelAdmin):
    list_display = ('qty', 'cost', 'total')

2

तुम सोच में सही हो कि __unicode__ऐसा करता है। मेरे पास अभी यह चल रहा है:

class Film(models.Model):
    title = models.CharField(max_length=200)
    ...
    def __unicode__(self):
        return self.title

जब मैं हाल की कार्रवाई सूची में देखता हूं, तो मुझे उस फिल्म का शीर्षक दिखाई देता है जिसे मैंने अभी-अभी संपादित किया है।


2

यह def str (सेल्फ) का उपयोग करते हुए काम करेगा : जो स्व। रिटर्न देता है

कुछ का उपयोग करें:

class Blog(models.Model):
    title = models.CharField(max_length=200)
    def __str__(self):
        return self.title

1

चूंकि यह सवाल 6 साल पुराना है, इसलिए बहुत सारी चीजें बदल गई हैं। मुझे इसके लिए एक अद्यतन करना चाहिए। python3.6 और Django के नवीनतम संस्करण (2.1.2) का उपयोग आपको हमेशा __str__()नए कोड में करना चाहिए । __unicode__()python2.7 के लिए एक पुरानी कहानी है क्योंकि python3 में, strहै unicode


0

इस तरह __str__()से मॉडल में विधि जोड़कर Patient:

class Patient(models.Model):
name=models.CharField(max_length=200)
#.........
def __str__(self):
    return self.name

ऑब्जेक्ट के बजाय रोगी का नाम प्रदर्शित करेगा। विस्तार से जाँच के लिए यहाँ

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