জ্যাঙ্গো অ্যাডমিন - একটি নির্দিষ্ট মডেলের জন্য 'যুক্ত' ক্রিয়াটি অক্ষম করুন


147

আমার প্রচুর মডেল এবং ফর্ম সহ একটি জাঙ্গো সাইট রয়েছে। আমার কাছে অনেক কাস্টম ফর্ম এবং ফর্মসেট এবং ইনলাইনফর্মেটস এবং কাস্টম বৈধতা এবং কাস্টম ক্যোয়ারসেট রয়েছে। অতএব অ্যাড মডেল ক্রিয়াটি এমন ফর্মগুলির উপর নির্ভর করে যা অন্যান্য জিনিসগুলির প্রয়োজন, এবং জ্যাঙ্গো অ্যাডমিনে 'মডেল যুক্ত করুন' একটি কাস্টম ক্যোয়ারসেট থেকে 500 এর মধ্য দিয়ে যায়।

কোনও নির্দিষ্ট মডেলের জন্য 'অ্যাড OD মডেল' কার্যকারিতাটি অক্ষম করার জন্য কী আছে?

আমি /admin/appname/modelname/add/একটি 404 (বা উপযুক্ত 'চলে যেতে' ত্রুটি বার্তা) দিতে চাই, আমি চাই না যে 'অ্যাড $ মডেলনেস' বোতামটি /admin/appname/modelnameদৃশ্যমান হোক।

জ্যাঙ্গো অ্যাডমিন অ্যাডমিন ক্রিয়া অক্ষম করার একটি উপায় সরবরাহ করে (http://docs.djangoproject.com/en/dev/ref/contrib/admin/ferences/#disabling-ferences) তবে এই মডেলটির একমাত্র ক্রিয়া হ'ল 'মুছুন_নির্বাচিত'। অর্থাত্ অ্যাডমিনের ক্রিয়াগুলি কেবল বিদ্যমান মডেলগুলিতে কাজ করে। এটি করার জন্য কিছু জ্যাঙ্গো-এস্কু উপায় আছে?


এফওয়াইআই: জ্যাঙ্গো অ্যাডমিনের 'ক্রিয়াগুলি' হ'ল ড্রপ ডাউন যা তালিকার যে কোনও চেক করা সারিগুলিতে চেঞ্জলিস্ট ভিউতে প্রয়োগ হয়।
টিম ডিজিগিনস

1
সম্পর্কিত (কিন্তু আলাদা হয়) প্রশ্ন: stackoverflow.com/questions/1721037/...
user9876

উত্তর:


342

এটি সহজ, has_add_permissionআপনার Adminক্লাসে কেবল ওভারলোড পদ্ধতি এমন:

class MyAdmin(admin.ModelAdmin):
     def has_add_permission(self, request, obj=None):
        return False

7
এটি আমার পক্ষে কার্যকর হয়নি। "মডেল যুক্ত করুন" বোতামটি এখনও মডেলের পরিবর্তন তালিকাটিতে প্রদর্শিত হয় shows
সেরিন

এখানে মাইএডমিন কি?
ব্যবহারকারী5319825

1
ভুলবেন এছাড়াও রেজিস্টার মত MyAdmin না: admin.site.register(MyModel, MyModelAdmin)সব যোগ admin.pymodels`s অ্যাপ্লিকেশন ফোল্ডার।
jাঙোনাট

আর ঠিক এই কারণেই আমি পাইথন ও জ্যাঙ্গোকে এত ভালবাসি। সহজ। দুর্দান্ত কাজ করেছেন ধন্যবাদ!
dxhans5

2
জাজানো 1.11 এ কাজ করে। objপ্যারামিটারের দরকার নেই ।
fjsj

9

ডিফল্টরূপে সিঙ্কডিবি প্রতিটি মডেলের জন্য 3 টি সুরক্ষা অনুমতি তৈরি করে:

  1. তৈরি করুন (ওরফে অ্যাড)
  2. পরিবর্তন
  3. মুছে ফেলা

যদি আপনার প্রশাসক হিসাবে লগ ইন থাকে তবে আপনি যা কিছু থাকুন না কেন সবকিছুই পান ।

তবে আপনি যদি "জেনারেল অ্যাক্সেস" নামে একটি নতুন ব্যবহারকারী গোষ্ঠী তৈরি করেন (উদাহরণস্বরূপ) তবে আপনি কেবলমাত্র পরিবর্তন এবং আপনার সমস্ত মডেলের জন্য অনুমতি মুছে ফেলতে পারেন।

তারপরে যে কোনও লগইন করা ব্যবহারকারীরাই group গোষ্ঠীর সদস্য, তাদের "তৈরি" অনুমতি থাকবে না, এর সাথে সম্পর্কিত কোনও কিছুই স্ক্রিনে প্রদর্শিত হবে না।


7

আমি মনে করি এটি আপনাকে সহায়তা করবে .. নীচের কোডটি অবশ্যই অ্যাডমিন.পি ফাইলের মধ্যে থাকতে হবে

@admin.register(Author)
class AuthorAdmin(admin.ModelAdmin):
    list_display = ('name', )
    list_filter = ('name', )
    search_fields = ('name', )
    list_per_page = 20

    # This will help you to disbale add functionality
    def has_add_permission(self, request):
        return False

    # This will help you to disable delete functionaliyt
    def has_delete_permission(self, request, obj=None):
        return False

উপরোক্ত সংযোজন হিসাবে পোস্ট করেছেন

    # This will help you to disable change functionality
    def has_change_permission(self, request, obj=None):
        return False

এটি ২.২ নিয়ে কাজ করে। এবং সুপারউসারদের জন্য অ্যাড এবং মুছে ফেলা বোতামগুলি সরিয়ে ফেলবে। ঠিক আমার যা প্রয়োজন
এরিক কালকোকেন

2

অন্য উত্তর থেকে কেবল কোড অনুলিপি করুন

# In admin
# make the related field can't be added
    def get_form(self, request, obj=None, **kwargs):
        form = super().get_form(request, obj, **kwargs)
        form.base_fields['service'].widget.can_add_related = False
        return form

আমার ক্ষেত্রে আমি ইনলাইন ব্যবহার করি

# In inline formset e.g. admin.TabularInline
# disable all
    def get_formset(self, request, obj=None, **kwargs):
        formset = super().get_formset(request, obj, **kwargs)
        service = formset.form.base_fields['service']
        service.widget.can_add_related = service.widget.can_change_related = service.widget.can_delete_related = False
        return formset

ইন service = formset.form.base_fields['service'] base_fieldsমডেল সংজ্ঞায়িত ক্ষেত্র হয়

যদি ফর্মটি ব্যবহার করে সংজ্ঞায়িত হন:

product = formset.form.declared_fields['product']

আরো দেখুন


হ্যাঁ, base_fieldsএবং declared_fieldsআমি এই কেস থেকে শিখেছি সবচেয়ে গুরুত্বপূর্ণ আবিষ্কার।
সিকে

0

এটি একটি অনেক বিলম্বিত উত্তর; কেবল এটি পোস্ট করা যেন কেউ একই সমাধান খুঁজে বেড়াচ্ছে।

অ্যাডমিনি.পি ফাইলে আপনি নিম্নলিখিতগুলি করতে পারেন:

class MyModelForm(forms.ModelForm):

class Meta:
    model = MyModel
    fields = '__all__'


class MyModelAdmin(admin.ModelAdmin):
    form = QuestionTrackAdminForm
    list_display = ['title', 'weight']
    readonly_fields = ['title', 'weight']

admin.site.register(MyModel, MyModelAdmin)

এখানে, "পঠনযোগ্য_ফিল্ডস" যাদু করে। ধন্যবাদ।


4
এটি "যোগ" বোতামটি প্রদর্শিত হতে বাধা দেয় না।
ফ্লাইম

এই সমাধানটি কেবল ফর্মটিতে শিরোনাম এবং ওজন ক্ষেত্রগুলিকে অক্ষম করে তুলবে। এটি কোনও নতুন মাইমোডেল অ্যাডমিন অবজেক্ট তৈরি করা আটকাবে না, যা আমি বিশ্বাস করি যে ওপি চেয়েছিল।
dxhans5
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.