2012-05-15 6 views
7

मैं Django/पायथन में रिश्तों के साथ खेल रहा हूं और मैं सोच रहा हूं कि आप कैसे उपयोगकर्ता और उसके अनुयायियों और एक अनुयायी के बीच संबंध बनाने वाले उपयोगकर्ताओं के बीच संबंध बनाएंगे।Django में ट्विटर जैसे ट्विटर के बारे में, आप इसे कैसे करेंगे?

आपकी राय पढ़ने के लिए प्यार करोगे ...

+1

जब तक आप एक विशिष्ट प्रोग्रामिंग से संबंधित प्रश्न मिल गया है, इस बेहतर एक मंच में एक पोस्ट के रूप से अनुकूल है। – patrickn

+0

@patrickn शायद सबसे अधिक हां लेकिन इसे एक प्रश्न के रूप में भी देखा जा सकता है। चूंकि मेरे पास कोई सुराग नहीं है, इसलिए मैं इसके बारे में पूछता हूं। –

उत्तर

19

सबसे पहले, आपको समझना चाहिए कि store additional information about users कैसे करें। इसके लिए एक और मॉडल की आवश्यकता है जिसका एक उपयोगकर्ता, "प्रोफाइल" मॉडल से संबंध हो।

उसके बाद, आप एक M2M क्षेत्र इस्तेमाल कर सकते हैं, यह मानते हुए आप django-annoying का उपयोग करेंगे, आप इस तरह के रूप में अपने उपयोगकर्ता प्रोफ़ाइल मॉडल निर्धारित कर सकते हैं:

from django.db import models 

from annoying.fields import AutoOneToOneField 

class UserProfile(models.Model): 
    user = AutoOneToOneField('auth.user') 
    follows = models.ManyToManyField('UserProfile', related_name='followed_by') 

    def __unicode__(self): 
     return self.user.username 

और इस तरह के रूप में इसका इस्तेमाल:

In [1]: tim, c = User.objects.get_or_create(username='tim') 

In [2]: chris, c = User.objects.get_or_create(username='chris') 

In [3]: tim.userprofile.follows.add(chris.userprofile) # chris follows tim 

In [4]: tim.userprofile.follows.all() # list of userprofiles of users that tim follows 
Out[4]: [<UserProfile: chris>] 

In [5]: chris.userprofile.followed_by.all() # list of userprofiles of users that follow chris 
Out[5]: [<UserProfile: tim>] 

साथ ही, ध्यान दें कि आप django-subscription, django-actstream, django-social (संभवतः उपयोग करने में कठोर) जैसे ऐप्स की जांच/पुन: उपयोग कर सकते हैं ...

वाई हो सकता है कि notifications और activities के लिए django संकुल को देखना चाहें क्योंकि उन्हें सभी को कुछ अनुवर्ती/सदस्यता डेटाबेस डिज़ाइन की आवश्यकता है।

+1

मैंने एक उपयोगकर्ता प्रोफाइल बनाया है। मुझे लगता है कि मुझे कई तरह से जाना चाहिए। लेकिन इस पंक्ति में chris.userprofile.followed_by.all() <- क्या आपने एक follow_by फ़ंक्शन को परिभाषित किया है? –

+0

असल में, follow_by UserProfile.follows फ़ील्ड का ** related_name ** है। डिफ़ॉल्ट रूप से, यह userprofile_set होगा जो वास्तव में जानकारीपूर्ण नहीं है। – jpic

+0

आह हाँ अब मैं धन्यवाद @jpic –

1

संपादित करें:, ManyToManyField उपयोग करने के लिए के रूप में टिप्पणीकार पता चलता है और अधिक समझ बनाता है। उपयोगकर्ता 0-x उपयोगकर्ता अनुयायी हो सकते हैं, और उपयोगकर्ता 0-x उपयोगकर्ता का अनुसरण कर सकते हैं।

https://docs.djangoproject.com/en/1.3/ref/models/fields/#manytomanyfield

कोड में जाने के बिना, बहुत अधिक नहीं कहा जा सकता है।

+1

एक एफके 0: 1 संबंध के लिए उपयोगी है। यदि आप वर्णन करने का प्रयास कर रहे हैं, तो उपयोगकर्ता के पास 0: एन अनुयायी हो सकते हैं और वह 0: n उपयोगकर्ताओं का अनुसरण कर सकता है। इस प्रकार, संबंध एन होगा: एम। – jpic

+0

मैं सही खड़ा हूं, 0 अनुसरण किए गए उपयोगकर्ताओं/0 अनुयायियों के मामले के बारे में भूल गया। – patrickn

+1

इसके बजाय, 'कई अनुवर्ती' और 'कई अनुयायी', एक एफके के रूप में केवल एक उपयोगकर्ता से संबंधित होने की अनुमति देता है। – jpic

2

यह कैसे मैं यह कर देगी:

class Tweeter(models.Model): 
    user = models.ManyToManyField('self', symmetrical=False, through='Relationship') 

class Relationship(models.Model): 
    who = models.ForeignKey(Tweeter, related_name="who") 
    whom = models.ForeignKey(Tweeter, related_name="whom") 

खोल में,

में [1]: टी = ट्वीटर()

में [2]: टी। बचाने()

[3]: च = ट्वीटर()

[4]: ​​f.save()

[5]: आर = रिश्ता()

में [6]: r.who = टी

में [7]: r.whom = च

में [8] : r.save()

में [18]: Relationship.objects.all() [0] .who.id
बाहर [18]: 1L

में [19]: Relationship.objects। सभी() [0] .whom.id
बाहर [19]: 2L

संबंधित मुद्दे