Bazen bazı örneklerin bir queryset'ten çıkarıldığından emin olma ihtiyacım var. Ben onlardan daha varsa,Django Alan aramasını kullanmadan queryset'ten belirli örnekleri hariç tutuyor
unwanted_instance = MyModel.objects.get(pk=bad_luck_number)
uninteresting_stuff_happens()
my_results = MyModel.objects.exclude(id=unwanted_instance.id)
ya:
Bu şekilde Genellikle fazlasını edilir
my_results = MyModel.objects.exclude(id_in=[uw_in1.id, uw_in2.id, uw_in3.id])
Bu biraz aksak hisseder, bu yüzden denedim:
my_ideally_obtained_results = MyModel.objects.exclude(unwanted_instance)
Hangi çalışmaz. Ancak here on SO'u okudum, bir alt sorgunun hariç tutulabilmesi için parametre olarak kullanılabileceğini.
Şansım kaçıyor mu? Bazı işlevler eksik (docs işaretli, ancak herhangi bir yararlı işaret bulamadık)
, sen inci varsa hariç tutulacak e-queryset (ör. "MyModel.objects.filter ()'), bir "ValuesQuerySet" kullanarak kimlikleri alabilirsiniz: 'id_dicts = MyModel.objects.filter (). Values ('id ')' ve [et [ 'query.exclude (id__in =' id_dicts öğenin kimlik']]) '. –
Yaklaşık 4 yıl sonra bu cevap benim problemimi çözdü. :-) – Garfonzo
Sadece @ RacingTadpole'un önerisine bir şey eklemek istedim: Tüm ID'lerin sıralı bir listesini almak için 'values_list (" id ", flat = True)' yi kolayca kullanabilirsiniz. Ancak bu DB'ye çarpacak, bu yüzden Python'un liste kavrayışını kullanmanızı tavsiye ederim. – stschindler