Django

⌘K
  1. Home
  2. Django
  3. Django তে কিভাবে কাজ করতে...
  4. Admin Panel
  5. get_queryset

get_queryset

get_queryset মেথডটি Django অ্যাডমিনের মধ্যে ব্যবহৃত হয় এবং এর মাধ্যমে আপনি অ্যাডমিন ইন্টারফেসে যেসব ডাটা দেখাতে চান তার তালিকা নিয়ন্ত্রণ করতে পারেন। এখানে মেথডটি DepartmentAdmin এর জন্য তৈরি করা হয়েছে, যাতে প্রত্যেক ইউজার শুধুমাত্র তার নিজের কোম্পানির ডিপার্টমেন্টগুলো দেখতে পায়।

মেথডটির কাজ:

def get_queryset(self, request):
    # Optionally limit the queryset to only departments in the user's company
    qs = super().get_queryset(request)
    if hasattr(request.user, 'company') and request.user.company:
        return qs.filter(company=request.user.company)
    return qs

ব্যাখ্যা (বাংলা মন্তব্যে):

  1. qs = super().get_queryset(request):
    • এখানে super() ব্যবহার করে মূল (default) get_queryset মেথডটি কল করা হয়েছে, যা মূলত মডেলের সমস্ত Department এর লিস্ট নিয়ে আসে।
    • এটি একটি QuerySet (ডাটাবেজ থেকে ডেটা টানার জন্য) ফিরিয়ে দেয়, যার মধ্যে সকল ডিপার্টমেন্টের তালিকা থাকবে।
  2. if hasattr(request.user, 'company') and request.user.company::
    • এখানে চেক করা হচ্ছে ইউজারের প্রোফাইলে company নামে কোনো অ্যাট্রিবিউট (বৈশিষ্ট্য) আছে কিনা।
    • hasattr(request.user, 'company') যাচাই করে, ইউজারের প্রোফাইলে company অ্যাট্রিবিউটটি বিদ্যমান কিনা।
    • যদি ইউজারের সাথে কোনো company অ্যাট্রিবিউট থাকে এবং সেটি None না হয়, তাহলে কোডটি পরের ধাপে যাবে।
  3. return qs.filter(company=request.user.company):
    • যদি ইউজারের প্রোফাইলে company অ্যাট্রিবিউট থাকে, তাহলে ডাটাবেজ থেকে কেবল সেই কোম্পানির অধীন থাকা ডিপার্টমেন্টগুলোই ফিল্টার করে আনা হবে।
    • অর্থাৎ, যেসব ডিপার্টমেন্টে company ফিল্ডটি ইউজারের কোম্পানির সাথে মিলে যায়, শুধুমাত্র সেগুলোই অ্যাডমিন ইন্টারফেসে দেখানো হবে।
  4. return qs:
    • যদি ইউজারের কোনো company অ্যাট্রিবিউট না থাকে, তবে পুরো ডিফল্ট ডিপার্টমেন্ট লিস্ট (অর্থাৎ সব কোম্পানির অধীন ডিপার্টমেন্ট) দেখানো হবে।

উদাহরণ:

  • সাধারণ ইউজার: যদি ইউজার ‘ABC কোম্পানি’ তে কাজ করে, তাহলে get_queryset মেথডটি কেবল ‘ABC কোম্পানি’র অধীনে থাকা ডিপার্টমেন্টগুলোই দেখাবে।
  • সুপারঅ্যাডমিন (যার কোনো কোম্পানি নির্দিষ্ট করা নেই): সুপারঅ্যাডমিন হলে বা ইউজারের কোনো কোম্পানি না থাকলে, সমস্ত কোম্পানির ডিপার্টমেন্টগুলো দেখানো হবে।

এই মেথডটি ইউজার-নির্দিষ্ট ডেটা ফিল্টার করতে সাহায্য করে, যা নিরাপত্তা এবং ডেটার প্রাসঙ্গিকতা নিশ্চিত করে।

How can we help?