2009-07-14 12 views
19
models.py
class SinglePoint(models.Model): 
    attributes = models.TextField(blank=True) 
    name = models.CharField(max_length=100) 
    geom = models.PointField() #Kartenposition 
    objects = models.GeoManager() 

class Connection(models.Model): 
    name = models.CharField(max_length=100) 
    #points = models.ManyToManyField(SinglePoint) #OLD 
    p1 = models.ForeignKey(SinglePoint, related_name='p1_set') #NEW 
    p2 = models.ForeignKey(SinglePoint, related_name='p2_set') #NEW 
    obs = models.ManyToManyField(Observation, blank=True) 
    conds = models.ManyToManyField(Condition, blank=True) 
    objects = models.GeoManager() 

class Meta: 
    order_with_respect_to = 'p1' 

बनाने:Howto एक में 2 Django क्वेरीसमूहों विलय और मेरे view.py में एक का चयन करें DISTINCT

points = SinglePoint.objects.filter(connection__vektordata__order__project__slug=slug) 
:

... 
p1_points = SinglePoint.objects.filter(p1_set__vektordata__order__project__slug=slug) 
p2_points = SinglePoint.objects.filter(p2_set__vektordata__order__project__slug=slug) 
... 

इससे पहले कि मैं ForeignKey का प्रयोग किया, यह के साथ काम किया

इन दो क्वेरीसेट्स को एक प्रश्नोत्तरी में कैसे शामिल करें और एक अलग() बनाएं?

धन्यवाद!

उत्तर

8

मैं geodjango से परिचित नहीं हूं, लेकिन QuerySets को एक क्वेरीसेट में जोड़ना क्यू-ऑब्जेक्ट और बूलियन ऑपरेटर के माध्यम से संभव है। देखें http://docs.djangoproject.com/en/dev/topics/db/queries/#complex-lookups-with-q-objects

उदाहरण:

Q(p1_points) | Q(p2_points) 

, मुझे आपकी सहायता नहीं कर सकते, क्योंकि मैं सच में यकीन है कि आप क्या हासिल करने की कोशिश कर रहे हैं नहीं कर रहा हूँ।

+0

मैं डबल SinglePoint उदाहरणों के बिना मेरी परियोजना में सभी SinglePoint उदाहरणों प्राप्त करना चाहते हैं (अलग)। ManyToMany-Field के साथ कोई समस्या नहीं थी, क्योंकि तब मैंने उन्हें .filter (कनेक्शन__vektordata__ ...) के साथ एक्सेस किया। विशिष्ट() और अब मेरे पास दो फ़ील्ड हैं: .filter (p1_set__vektordata__ ... और .filter (p2_set__vektordata__ ...) –

+0

क्षमा करें, मेरा मतलब है "फ़ील्ड्स" नहीं "फ़ील्ड" –

+0

परिणाम = क्यू (पी 1_ पॉइंट्स) | क्यू (पी 2_ पॉइंट्स) परिणाम। बच्चे मुझे [[<सिंगलपॉइंट: ए>, <सिंगलपॉइंट: एक्स 1>], [<सिंगलपॉइंट: एक्स 1>, <सिंगलपॉइंट: एक्स 2>]] लेकिन मैं अलग-अलग कॉल करने के लिए [<सिंगलपॉइंट: ए>, <सिंगलपॉइंट: एक्स 1>, <सिंगलपॉइंट: एक्स 1>, <सिंगलपॉइंट: एक्स 2>] रखना चाहता हूं() –

61

यह मुझे इस

all_points = p1_points | p2_points 
+0

बहुत बहुत धन्यवाद! !! +1 – cwirz

+0

विभिन्न मॉडलों में काम नहीं कर रहा है, हालांकि –

+0

पायथन में इस '|' ऑपरेटर का नाम क्या है? –

6

मुझे लगता है कि Q queries लगाने के लिए प्राप्त कर सकते हैं क्या आप इस तरह की जरूरत है कुछ समय लिया:

points = SinglePoint.objects.filter(
    Q(p1_set__vektordata__order__project__slug=slug) | 
    Q(p2_set__vektordata__order__project__slug=slug) 
).distinct() 
संबंधित मुद्दे