• 1

كيفية إستبعاد القيم الفارغة و قيم Null في QuerySet في جانغو Django؟

لدي نموذج يحتوي على الاسم الأول fName والاسم الأخير lName والاسم المستعار nickName (اختياري nullable) وكنت أريد استعلام عن جميع الأشخاص الذين يملكون اسم مستعار.

وقد حاولت أن أستخدم الكود التالي:

User.objects.filter(nickName!="")

لكن يبدو أن الأمر لم ينجح، كيف أقوم بإستبعاد المستخدمين الذين لا يملكون اسم مستعار؟

2 اشخاص أعجبوا بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 1

يمكنك أن تستعمل التابع exclude كالتالي:

User.objects.exclude(nickName__isnull = True)

إذا كنت بحاجة إلى استبعاد القيم الفارغة أيضًا، فبإمكانك القيام بذلك من خلال تجميع الشروط معًا مثل:

User.objects.exclude(nickName__exact = "").exclude(nickName__isnull = True)

في الكود السابق سوف يتم إستبعاد كل القيم الفارغة أو التي تساوي Null

يمكنك أيضًا أن تستعمل التابع Filter كالتالي:

User.objects.filter(nickName__isnull = False, nickName__gt = "")

يقوم الكود السابق بنفس الشيء وستحصل على نفس النتيجة

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

إضافة للإجابات التي قدمها سامح، يمكنك استخدام:

from django.db.models.functions import Length
Name.objects.annotate(alias_length=Length('alias')).filter(alias_length__gt=0)

أو باستخدام Q:

from django.db.models import Q
Name.objects.exclude(Q(alias__isnull=True) | Q(alias__exact=''))

أيضاً يمكنك استخدام isempty lookup عام بحيث يمكنك استخدامه مع أي حقل. يمكن استخدامه أيضاً بواسطة django rest_framework أو التطبيقات الأخرى التي تستخدم عمليات بحث django:

from distutils.util import strtobool
from django.db.models import Field
from django.db.models.lookups import BuiltinLookup
@Field.register_lookup
class IsEmpty(BuiltinLookup):
    lookup_name = 'isempty'
    prepare_rhs = False
    def as_sql(self, compiler, connection):
        sql, params = compiler.compile(self.lhs)
        condition = self.rhs if isinstance(self.rhs, bool) else bool(strtobool(self.rhs))
        if condition:
            return "%s IS NULL or %s = ''" % (sql, sql), params
        else:
            return "%s <> ''" % sql, params
# ثم يمكنك استخدامه كالتالي
Name.objects.filter(alias__isempty=False)

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن