Öncelikle beni alenen ne istiyorsunuz kolaylaştırmak için yaratılmış bir yerde hiçbir Django makine olduğunu varsayalım: Yani her iki sorguları geçerli olacaktır.
(Düzenleme - aslında Django 1.7 beri vardır: https://docs.djangoproject.com/en/1.7/howto/custom-lookups/) Eğer gerçekten bu, alt sınıf QuerySet
başarmak ve _filter_or_exclude()
yöntemi geçersiz kılmak istiyorsanız, söz konusu
. Ardından, yalnızca özel QuerySet
(veya maymun eki Django'nun QuerySet
, yuck) öğesini döndüren özel bir yönetici oluşturun. Neo4j'ye özgü Query
nesneleri oluştururken mümkün olduğunca Django ORM sorgulama kodunun çoğunu yeniden kullanmak için neo4django içinde bunu yapıyoruz.
Zach'in yanıtından uyarlanmış bir şeyi (kabaca) deneyin. Ben okuyucuya örnek :)
class PersonQuerySet(models.query.QuerySet):
def _filter_or_exclude(self, negate, *args, **kwargs):
cust_lookups = filter(lambda s: s[0].endswith('__within5'), kwargs.items())
for lookup in cust_lookups:
kwargs.pop(lookup[0])
lookup_prefix = lookup[0].rsplit('__',1)[0]
kwargs.update({lookup_prefix + '__gte':lookup[1]-5,
lookup_prefix + '__lt':lookup[1]+5})
return super(PersonQuerySet, self)._filter_or_exclude(negate, *args, **kwargs)
class PersonManager(models.Manager):
def get_query_set(self):
return PersonQuerySet(self.model)
class Person(models.Model):
age = #...
objects = PersonManager()
Final sözler saha arama ayrıştırma için işleme gerçek hatayı bıraktım - açıkça, sen zincir özel alan aramalarının istiyorsanız, bu oldukça kıllı olsun gidiyor. Ayrıca, normalde bunu biraz daha işlevsel olarak yazıyor ve performans için itertools kullanıyorum, ama onu dışarıda bırakmanın daha açık olduğunu düşündüm. İyi eğlenceler!
Bu cevaplar onun örneği için yararlıdır (bu sadece kendi noktası yapmak için attığı bir şey olabilir ya da olmayabilir) .. ama birisi sorulan soruya cevap verse çok sevinirim. – royal
@royal Sanırım cevabım bunu kapsamaktadır - Ben bunun üzerinde çalıştığım bir kütüphanede geldim. –