উত্তর:
আপনি এটি করতে পারেন:
Name.objects.exclude(alias__isnull=True)
যদি আপনাকে নাল মান এবং খালি স্ট্রিংগুলি বাদ দিতে হয় , তবে এটির জন্য পছন্দসই উপায় হল শর্তগুলি একসাথে চেইন করা:
Name.objects.exclude(alias__isnull=True).exclude(alias__exact='')
এই পদ্ধতিগুলিকে এক সাথে শৃঙ্খলাবদ্ধ করে প্রতিটি কন্ডিশনটি স্বাধীনভাবে চেক করা হয়: উপরের উদাহরণস্বরূপ, আমরা সারিগুলি বাদ দিই যেখানে aliasহয় নাল বা খালি স্ট্রিং রয়েছে, সুতরাং আপনি এমন সমস্ত Nameবস্তু পাবেন যা একটি নাল নয়, খালি নেই aliasfield উত্পন্ন এসকিউএল এর মতো দেখতে কিছু হবে:
SELECT * FROM Name WHERE alias IS NOT NULL AND alias != ""
আপনি একক কলটিতে একাধিক যুক্তিও সরবরাহ করতে পারেন exclude, যা নিশ্চিত করে যে কেবলমাত্র প্রতিটি শর্ত পূরণ করে এমন বস্তুগুলি বাদ দেওয়া হয়েছে:
Name.objects.exclude(some_field=True, other_field=True)
এখানে, যে সারিগুলিতে some_field এবং other_field সত্য সেগুলি বাদ দেওয়া হয়, সুতরাং আমরা উভয় ক্ষেত্রই সত্য নয় এমন সমস্ত সারি পাই। উত্পন্ন এসকিউএল কোডটি দেখতে কিছুটা এ জাতীয় দেখাচ্ছে:
SELECT * FROM Name WHERE NOT (some_field = TRUE AND other_field = TRUE)
বিকল্পভাবে, আপনার যুক্তি যদি এর চেয়ে জটিল হয় তবে আপনি জ্যাঙ্গোর কিউ অবজেক্ট ব্যবহার করতে পারেন :
from django.db.models import Q
Name.objects.exclude(Q(alias__isnull=True) | Q(alias__exact=''))
আরও তথ্যের জন্য এই পৃষ্ঠাটি এবং এই পৃষ্ঠাটি জ্যাঙ্গো ডক্সে দেখুন।
একদিকে যেমন: আমার এসকিউএল উদাহরণগুলি কেবল একটি সাদৃশ্য - আসল উত্পন্ন এসকিউএল কোড সম্ভবত অন্যরকম দেখবে। জ্যাঙ্গো কোয়েরিগুলি কীভাবে কাজ করে সে সম্পর্কে আপনি আরও গভীর উপলব্ধি পাবেন actually
ORশর্তটি ফিউজ করার জন্য কোনও ব্যবহারের নিশ্চয়তা রয়েছে । আমি পরিষ্কার করতে আমার উত্তর সম্পাদনা করব।
NOT (A AND B)এর সমতুল্য NOT A OR NOT B। আমি মনে করি যে এটি নতুন জ্যাঙ্গো বিকাশকারীদের কাছে বিভ্রান্তিকর করে তোলে যারা এসকিউএল জানেন তবে ওআরএমের সাথে অপরিচিত।
ANDএকটি প্রথম ক্যোয়ারীতে ORকারণ আপনি ব্যবহার করছেন exclude। সাধারণ ক্ষেত্রে, এটা সম্ভবত একটি হিসাবে chaining মনে আরো সঠিক THEN, অর্থাত্ exclude(A) THEN exclude(B)। উপরে কঠোর ভাষা সম্পর্কে দুঃখিত। আপনার উত্তরটি সত্যই ভাল তবে নতুন বিকাশকারীরা আপনার উত্তরটি খুব সাধারণভাবে গ্রহণ করায় আমি উদ্বিগ্ন।
ANDএবং ORকেউ একটি SQL পটভূমি থেকে জ্যাঙ্গো করতে আসার জন্য সহায়ক হতে পারে। জ্যাঙ্গোর গভীর বোঝার জন্য, আমি মনে করি ডকগুলি আমার থেকে আরও ভাল কাজ করে।
Name.objects.filter(alias__gt='',alias__isnull=False)
alias__isnull=Falseশর্তটি অপ্রয়োজনীয়। যদি ক্ষেত্রটি Nullঅবশ্যই হয় তবে তা প্রথম দফায় বাদ দেওয়া হবে?
alias__gtআমি কেবল JSON টাইপ কলামের জন্য কাজ করেছি যেখানে আমি JSON এর মতো খালি স্ট্রিংগুলি বাদ দিতে চেয়েছিলাম {'something:''}। কাজ করছে সিনট্যাক্সটি:jsoncolumnname__something__gt=''
প্রথমত, জাজানো ডক্স চার্ফিল্ড বা টেক্সটফিল্ডের মতো স্ট্রিং-ভিত্তিক ক্ষেত্রগুলির জন্য NULL মানগুলি ব্যবহার না করার জোর পরামর্শ দেয় recommend ব্যাখ্যার জন্য ডকুমেন্টেশন পড়ুন:
https://docs.djangoproject.com/en/dev/ref/models/fields/#null
সমাধান: আপনি ক্যোরিসেটগুলিতে পদ্ধতিগুলি একসাথে চেইন করতে পারেন, আমার ধারণা। এটা চেষ্টা কর:
Name.objects.exclude(alias__isnull=True).exclude(alias="")
এটি আপনাকে যে সেটটি সন্ধান করছে তা দেওয়া উচিত।
জ্যাঙ্গো ১.৮ থেকে,
from django.db.models.functions import Length
Name.objects.annotate(alias_length=Length('alias')).filter(alias_length__gt=0)
ব্যবহার করার সময় সাধারণ ভুল এড়াতে exclude, মনে রাখবেন:
আপনি একাধিক কন্ডিশন যুক্ত করতে () ব্লকের মতো বাদ দিতে পারবেন না । একাধিক শর্ত বাদ দিতে আপনার একাধিক বর্জন করতে হবে ()filter
উদাহরণ
ভুল :
ব্যবহারকারী.ওবজেক্টস.ফিল্টার (ইমেল='example@example.com ')।
সঠিক :
User.objects.filter (email='example@example.com ')। অগ্রাহ্য (profile__nick_name =' ')। অগ্রাহ্য (profile__avt =' ')
আপনি কেবল এটি করতে পারেন:
Name.objects.exclude(alias="").exclude(alias=None)
এটা সত্যিই সহজ। filterমেলতে ব্যবহৃত হয় এবং excludeসমস্ত কিছুর সাথে মিলে যায় যা এটি নির্দিষ্ট করে। এটি হিসাবে এসকিউএল হিসাবে মূল্যায়ন হবে NOT alias='' AND alias IS NOT NULL।
alias="") এবং NULL ( alias=None) উপকরণগুলি বাদ দেওয়া । আপনার সাথে উদাহরণগুলি অন্তর্ভুক্ত থাকবে Name(alias=None)।
.filter(alias!="")শিরোনামের সমতুল্য তবে কী নয়? আমি আমার উত্তর সম্পাদনা করেছি। যাইহোক, অক্ষর ক্ষেত্রগুলি NULL মানগুলিকে অনুমতি দেয় না এবং একটি অ-মান (কনভেনশন অনুসারে) খালি স্ট্রিংটি ব্যবহার না করে।
এটি এটি করার আরও একটি সহজ উপায়।
Name.objects.exclude(alias=None)
Noneহিসাবে একই জিনিস নয় ""।
OR(কেবলমাত্র এই ক্ষেত্রে), এটি একটি এসকিউএল উত্পাদন করেAND। রেফারেন্সের জন্য এই পৃষ্ঠাটি দেখুন: docs.djangoproject.com/en/dev/topics/db/queries/… শৃঙ্খলার সুবিধা হ'ল আপনি মিশ্রিত করতে পারেনexcludeএবংfilterজটিল প্রশ্নের শর্তগুলি মডেল করতে পারেন । আপনি যদি সত্যিকারের এসকিউএল মডেল করতে চান তবেORআপনাকে অবশ্যই জ্যাঙ্গো কি অবজেক্টটি ব্যবহার করতে হবে: ডকস.ডজ্যাঙ্গোপ্রজেক্ট / জেন / দেব / টোপিক্স / ডিবি / কুইরিস / this অনুগ্রহ করে এটি সম্পাদন করার জন্য আপনার সম্পাদনাটি সম্পাদনা করুন, কারণ উত্তরটি মারাত্মকভাবে বিভ্রান্তিকর হিসাবে এটি দাঁড়িয়েছে ।