জ্যাঙ্গো - বিদেশী কী বৈশিষ্ট্যগুলিতে ফিল্টারিং


113

আমি একটি নির্দিষ্ট ক্ষেত্রের মান এর উপর ভিত্তি করে জাজানোতে একটি টেবিল ফিল্টার করার চেষ্টা করছি ForeignKey

উদাহরণস্বরূপ, আমার কাছে দুটি মডেল রয়েছে:

class Asset(models.Model):
    name = models.TextField(max_length=150)
    project = models.ForeignKey('Project')

class Project(models.Model):
    name = models.TextField(max_length=150)

আমি সম্পর্কিত প্রকল্পের নামের উপর ভিত্তি করে আমার সম্পদ তালিকা ফিল্টার করতে চাই।

বর্তমানে, আমি দুটি প্রশ্নের সম্পাদনা করছি :

project_list = Project.objects.filter(name__contains="Foo")
asset_list = Asset.objects.filter(desc__contains=filter,
                                  project__in=project_list).order_by('desc')

আমি ভাবছি যে প্রধান প্রশ্নের মধ্যে এই ধরণের ফিল্টারিং নির্দিষ্ট করার কোনও উপায় আছে?

উত্তর:


177

Asset.objects.filter( project__name__contains="Foo" )


4
ধন্যবাদ, আমি চেষ্টা করেছিলাম কিন্তু দৃশ্যত আমি ডাবল আন্ডারস্কোর ব্যবহার করতে ভুলে গিয়েছিলাম।
ফ্রেজার গ্রাহাম 18

4
প্রয়োজনীয় আছে ??
ডেডড্যাজ্যাঙ্গো জোকার

@DeadDjangoDjoker containsযে ক্যোয়ারির কারণে জ্যাঙ্গো ORM উৎপন্ন ব্যবহৃত তুলনা ধরণ বর্ণনা করে, SQL সম্ভবত দেখতে কেমন হবে LIKE '%Foo%'
অরেঞ্জক্যাটারপিলার

17

queryset-refactorশাখাটি প্রাক -১.০ প্রান্তে আসার পর থেকে এটি সম্ভব হয়েছে । 4088 টিকেট সমস্যাটি প্রকাশ করেছে। এই কাজ করা উচিত:

Asset.objects.filter(
    desc__contains=filter,
    project__name__contains="Foo").order_by("desc")

জ্যাঙ্গো অনেক টু এক ডকুমেন্টেশন এই এবং পররাষ্ট্র কী নিম্নলিখিত মডেল API ব্যবহার করে অন্যান্য উদাহরণ আছে।


4
এটি কি ডিবিতে দুবার আঘাত করতে চলেছে, আমি কি এটিকে আরও অনুকূল করতে সিলেক্ট _ রিলেটেড () ব্যবহার করব?
ফ্রেজার গ্রাহাম

5
স্ক্যালিটি কী কার্যকর হবে তা দেখতে আপনি একটি .query.as_sql () যুক্ত করতে পারেন।
ফাস্টমুটিপ্লিকেশন

জ্যাঙ্গো ডক্সের লিঙ্কটি সম্পূর্ণ
পুরানো

0
student_user = User.objects.get(id=user_id)
available_subjects = Subject.objects.exclude(subject_grade__student__user=student_user) # My ans
enrolled_subjects = SubjectGrade.objects.filter(student__user=student_user)
context.update({'available_subjects': available_subjects, 'student_user': student_user, 
                'request':request, 'enrolled_subjects': enrolled_subjects})

উপরের আমার আবেদনে, আমি ধরে নিয়েছি যে একবার শিক্ষার্থী ভর্তি হয়ে গেলে, সাবজেক্টগ্র্যাডের একটি বিষয় তৈরি করা হবে যাতে এতে ভর্তি হওয়া বিষয়টি এবং ছাত্র নিজে / নিজেই থাকে।

সাবজেক্ট এবং শিক্ষার্থী ব্যবহারকারী মডেল সাবজেক্ট গ্রেড মডেলের একটি বিদেশী কী Foreign

"উপলভ্য_সুবজেক্টস" এ আমি বর্তমান শিক্ষার্থী_ ব্যবহারকারী কর্তৃক ইতোমধ্যে বর্তমান শিক্ষার্থী ব্যবহারকারী হিসাবে "শিক্ষার্থী" বৈশিষ্ট্যযুক্ত সমস্ত সাবজেক্টের উদাহরণ যাচাই করে বর্তমান ছাত্র_ ব্যবহারকারী দ্বারা নিবন্ধিত সমস্ত বিষয় বাদ দিয়েছি

পুনশ্চ. আমার ব্যাখ্যাটির কারণে আপনি এখনও বুঝতে না পারলে অগ্রিম ক্ষমা চাইবেন। এটি আমি সরবরাহ করতে পারি সেরা ব্যাখ্যা। তোমাকে অনেক ধন্যবাদ


আমি মনে করি এটিকে প্রসঙ্গে রেখে কোডের ব্লকটিতে কিছু পাঠ্য, ব্যাখ্যা বা মন্তব্য সম্পাদনা করা এবং যুক্ত করা দুর্দান্ত হবে।
ইলিশা সেনু

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