ডেটটাইমফিল্ড অ্যাডমিন সিস্টেমে দেখায় না


89

আমার "তারিখ" ক্ষেত্রটি অ্যাডমিন সিস্টেমে কীভাবে আসে না?

আমার অ্যাডমিন.পি ফাইলটিতে

from django.contrib import admin
from glasses.players.models import *
admin.site.register(Rating)

এবং রেটিং মডেলটির এমন একটি ক্ষেত্র রয়েছে যা "তারিখ" বলে মনে হয় যা দেখতে এটির মতো

date = models.DateTimeField(editable=True, auto_now_add=True)

অ্যাডমিন সিস্টেমের মধ্যে যাইহোক, ক্ষেত্র প্রদর্শন করা হয় না, যদিও editableসেট করা হয় True

কারও কি কোন ধারণা আছে?

উত্তর:


58

আমি auto_now_addমাঠে মিথ্যা যুক্তি বিশ্বাস করি ।

এই উত্তর থেকে :

অটো-অ্যান্টিবিউট সেট সহ যে কোনও ক্ষেত্র সম্পাদনাযোগ্য = মিথ্যা হিসাবে উত্তরাধিকারী হবে এবং তাই অ্যাডমিন প্যানেলে প্রদর্শিত হবে না।

এছাড়াও উল্লেখ ডক্স :

বর্তমানে যেমন বাস্তবায়িত হয়েছে, অটো_নো বা অটো_আও_আড্ডু সত্য হিসাবে সেট করা ক্ষেত্রটিকে সম্পাদনযোগ্য = মিথ্যা এবং ফাঁকা = সত্য সেট করতে বাধ্য করবে।

এটি অর্থবোধ করে না, যেহেতু ক্ষেত্রটি সম্পাদনাযোগ্য হওয়ার কোনও কারণ নেই যদি এটি বর্তমান তারিখের সময়টি সাথে বস্তুটি সংরক্ষণ করা হয় তখন এটি মুছে ফেলা হবে।


31
যদিও অবশ্যই আপনাকে এন্ট্রি প্রথম তৈরি হওয়ার পরেauto_now_add অ্যাডমিনের মাধ্যমে সম্পাদনা করতে সক্ষম হওয়া উচিত ?
ক্রিস্টোফার ওড়

70
অদক্ষযোগ্য হলেও আপনার এটিকে অ্যাডমিন ইন্টারফেসে কেবল প্রদর্শন করতে সক্ষম হওয়া উচিত ।
ব্র্যাড

4
অ্যাডমিন ইন্টারফেসে কেবলমাত্র পাঠযোগ্য ক্ষেত্র হিসাবে এটি কীভাবে প্রদর্শিত করতে দয়া করে নীচে @ হুঙ্গারের উত্তরটি দেখুন।
সাহসী

4
ক্ষেত্রটি কেবলমাত্র কোনও অবজেক্ট তৈরিতে (অটো_নো_এডডি = সত্য) সন্নিবেশ করা থাকলে কোনও ক্ষেত্র সম্পাদনযোগ্য হবে তা বোঝা যায় না।
সার্গাজাচ

210

আপনি কি সত্যিই অ্যাডমিন প্যানেলে তারিখ দেখতে চান, আপনি যোগ করতে পারেন readonly_fieldsমধ্যে admin.py :

class RatingAdmin(admin.ModelAdmin):
    readonly_fields = ('date',)

admin.site.register(Rating,RatingAdmin)

আপনার নির্দিষ্ট করা কোনও ক্ষেত্র সম্পাদনাযোগ্য ক্ষেত্রগুলির পরে শেষে যুক্ত হবে। অর্ডার নিয়ন্ত্রণ করতে আপনি fieldsবিকল্পগুলি ব্যবহার করতে পারেন ।

জ্যাঙ্গো ডক্স থেকে অতিরিক্ত তথ্য পাওয়া যায় ।


33
এটিই আসল উত্তর !!
গ্রিনএজজেড

4
যদি আপনি একটি নির্ধারিত করেন তবে আপনাকে fieldsনিজের ক্ষেত্রটি এতে রাখতে হবে, যাতে আপনার এটি উভয়ই দরকার হয় readonly_fieldsএবং fieldsঅন্যথায় ক্ষেত্রটি প্রদর্শিত হবে না।
বিয়ন্সের

আমি কেবল এটি লক্ষ করতে চেয়েছিলাম যে এটি আপনি যদি ব্যবহার করছেন তবে এটি প্রয়োগ হয়েছে fieldsets, কেবল আজই এই সমস্যাটি নিয়ে এসেছেন।
কেভিন ব্রাউন

4
এটি ক্ষেত্রটি কেবল তখনই প্রদর্শিত হবে যখন আমরা একটি নির্দিষ্ট এন্ট্রি ক্লিক করব এবং খুলব। আপনি ক্ষেত্র listview নিজেই তারপর দৃশ্যমান হতে চান stackoverflow.com/a/34966908/4440874
Jyotman সিং

4
নোট করুন যে আমি নিশ্চিত নই তবে এটি auto_now_add=Trueজ্যাঙ্গো ১.৯ এর অধীনে ডেটটাইমফিল্ডগুলির পক্ষে কাজ করে বলে মনে হচ্ছে না । একটি (সাজানোর) workaround list_displayপরিবর্তে তাদের টিউপল এ যুক্ত করা হয়। সম্পাদনা: আপনি যদি নিজের ক্ষেত্রটিকে fields@ জর্ন টিপলিং উল্লিখিত হিসাবে যুক্ত করেন তবে এটি কাজ করবে ।
টেলর এডমিস্টন

23

প্রধান হ্যাক:

আপনার যদি সত্যিই এটি করার প্রয়োজন হয় (যেমন আমি করি) আপনি সর্বদা এটির চারপাশে হ্যাক করতে পারেন ইমিডিয়েটলি ফিল্ডটিকে "সম্পাদনযোগ্য" হিসাবে ক্ষেত্রটি নীচে নির্ধারণ করে সেট করে:

class Point(models.Model):
  mystamp=models.DateTimeField("When Created",auto_now_add=True)
  mystamp.editable=True

এটি ক্ষেত্রটি সম্পাদনযোগ্য করে তুলবে, সুতরাং আপনি এটির পরিবর্তন করতে পারবেন। এটি কমপক্ষে mysql ব্যাকিং ইঞ্জিন সহ ঠিকঠাক কাজ করছে বলে মনে হচ্ছে। আমি সারটিয়ানদের পক্ষে বলতে পারি না যদি অন্যান্য ব্যাকিং স্টোরগুলি ডেটাবেজে এই ডেটাটিকে পরিবর্তনযোগ্য করে তুলবে এবং এভাবে সম্পাদনার চেষ্টা করার সময় কোনও সমস্যা তৈরি করে, তাই সতর্কতার সাথে ব্যবহার করুন


নাহ, এটি করবেন না, ক্ষুধার্ত দ্বারা বর্ণিত পঠনক্ষেত্রের সমাধানগুলি ব্যবহার করুন।
গ্রিনএজজেড

4
@ গ্রীনআসজেড: একটি যুক্তি সুন্দর হবে।
mhsmith

এর পরিবর্তে ক্ষুধার সমাধানটি ব্যবহার করতে @mhsmith Rationale: কারণ এটি একটি বড় হ্যাক এবং "সাবধানতার সাথে ব্যবহার" এর সাথে আসে, হাঙ্গারের সমাধানটি যেভাবে ডিজাইন করার জন্য ডিজাইন করা হয়েছে সেভাবে জ্যাঙ্গো ব্যবহার করে। আপনি যখন বৈধ এবং সমর্থিত ফ্যাশনে যা প্রয়োজন তা করতে পারেন তবে আপনি কেন একটি বড় হ্যাকের ঝুঁকি নেবেন?
গ্রিনআসজেড

6
এই হ্যাক সমাধান যে খারাপ না। যদিও আমি দেখতে পাই এটির জন্য একমাত্র ব্যবহারের ক্ষেত্রে পরীক্ষা হচ্ছে - যখন পরীক্ষকের তারিখ পরিবর্তন করতে হয়।
জাকুর

4
কেবলমাত্র একটি সতর্কতা: এই হ্যাকটি আমার জন্য মাইগ্রেশনগুলিকে
গোলমাল

16

আপনার নির্দিষ্ট প্রয়োজন এবং আচরণের পার্থক্যের যে কোনও ছোটখাটো উপর নির্ভর করে আপনি নিম্নলিখিতটি করতে পারেন:

from django.utils.timezone import now

class MyModel(models.Model):
    date = models.DateTimeField(default=now)

ডিফল্ট ক্ষেত্রটি এভাবে ব্যবহার করা যেতে পারে: https://docs.djangoproject.com/en/dev/ref/models/fields/#default

The default value for the field. This can be a value or a callable object. If callable it will be called every time a new object is created.

এটি সম্পাদনাযোগ্য সেট করে না False


4
আমি from django.utils.timezone import nowপরিবর্তে ব্যবহার করব datetime.now, তবে এটি আশাব্যঞ্জক মনে হচ্ছে।
amjoconn

ধন্যবাদ, আমি এটি পরিবর্তন করেছি।
কক্ষপথ

স্ট্যাকওভারফ্লো দুর্দান্ত কারণ, কিছু উত্তর আপনাকে বুঝতে দেয় যে আপনি সঠিক প্রশ্ন জিজ্ঞাসা করেননি! ধন্যবাদ.
স্যামুয়েল ডাজন

5

এটি অটো_আও_আড্ড সত্য হওয়ার সাথে করতে পারে। অ্যাড করার তারিখটি ক্যাপচার করার জন্য সম্ভবত সেই পরামিতিটির পরিবর্তে, আইডিটি শূন্য হলে ডেটটাইম সন্নিবেশ করানোর জন্য আপনি মডেল সংরক্ষণ পদ্ধতিটি ওভাররাইড করতে পারেন।

class Rating(models.Model):

    ....
    def save(self, *args, **kwargs)
        if not self.id: 
            self.date = datetime.datetime.now()

যদি আপনি তা করেন তবে ক্ষেত্রটি অটো_নো
ফ্যালানএঞ্জেল

ডাউনটাতে কেন নিশ্চিত নয়; শন চিন প্রথম লিঙ্কটি অনুরূপ পদ্ধতির ইঙ্গিত দেয়।
জো জে

এটি একটি বোধগম্য বিকল্প, ধরে auto_nowনেওয়া যায় না এবং ব্যবহৃত হয় না editable=False। +1
শান চিন

3

আপনি যদি চান যে কোনও ক্ষেত্র আপনার সমস্ত এন্ট্রিগুলির তালিকাতে দৃশ্যমান হয় (যখন আপনি প্রশাসকের লোকদের কোনও মডেলটিতে ক্লিক করেন) এবং যখন আপনি সেই নির্দিষ্ট এন্ট্রিটি খোলেন না -

class RatingAdmin(admin.ModelAdmin):
    list_display = ('name', 'date') 

admin.site.register(Rating, RatingAdmin)

'নাম' হ'ল আপনার প্রধান ক্ষেত্র বা অন্য কোনও ক্ষেত্র যা আপনি অ্যাডমিন প্যানেলে প্রদর্শন করতে চান।

আপনি যে কলামগুলি দেখতে চান তা এই ভাবে নির্দিষ্ট করতে পারেন।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.