मैं Django 1.5 का उपयोग कर रहा हूं।
मेरे पास एक टेबल है बहु उपयोगकर्ता
class MultiUser(models.Model):
user = models.ForeignKey(User, related_name='owner_user')
shared_user = models.ForeignKey(User, related_name='shared_user')
access_level = models.CharField(
default='Viewer',
max_length='100',
blank=True
)
यह तालिका स्वामी उपयोगकर्ता के अंतर्गत पहुँच स्तर वाले उपयोगकर्ताओं को मैप करती है। user
फ़ील्ड स्वामी उपयोगकर्ता को परिभाषित करती है और shared_user
मैप किया गया उपयोगकर्ता है जो या तो प्रबंधक या दर्शक हो सकता है
मैं मालिक उपयोगकर्ता सहित सभी उपयोगकर्ताओं की सूची प्राप्त करने के लिए एक मॉडल प्रबंधक विधि परिभाषित किया है।
def getSharedUsers(self, user):
# Get owner
owner = None
if self.filter(user=user).exists():
owner = user
elif self.filter(shared_user=user).exists():
owner = self.filter(shared_user=user)[0]
# Get all users
shared_users = []
if owner:
shared_users = self.filter(user=owner)
shared_users.append({
'shared_user': owner,
'access_level': 'OWNER',
'created': owner.created
})
return shared_users
चूंकि स्वामी उपयोगकर्ता के पास बहु उपयोगकर्ता मॉडल में कोई access_level
परिभाषित नहीं है। मैं मैन्युअल रूप से स्वामी उपयोगकर्ता को क्वेरीसेट सूची में shared_user
फ़ील्ड सेट के साथ स्वामी उपयोगकर्ता और access_level
को स्वामी के रूप में जोड़ना चाहता हूं।
लेकिन यह त्रुटि के रूप में देता है
'QuerySet' object has no attribute 'append'
मैन्युअल रूप से जेनरेट किए गए ऑब्जेक्ट को क्वेरीसेट ऑब्जेक्ट में जोड़ना संभव है? यदि हाँ तो कैसे?
2 जवाब
यहां जब आप shared_users = self.filter(user=owner)
का उपयोग कर रहे हैं, तो shared_users
एक क्वेरीसेट बन जाता है। ठीक है, अगर आप मालिक को क्वेरीसेट में जोड़ना चाहते हैं, तो आप इसे इस तरह कर सकते हैं:
from itertools import chain
shared_users = list(chain(shared_users, [{
'shared_user': owner,
'access_level': 'OWNER',
'created': owner.created
}])
लेकिन नीचे की ओर है, आप एक क्वेरीसेट की समर्थन कार्यक्षमता खो देंगे। तो आपको इसे एक सूची की तरह उपयोग करने की आवश्यकता है।
आप देखिए, इसमें माजरा कहां है।
# Get all users
shared_users = []
if owner:
shared_users1 = self.filter(user=owner)
shared_users.append({
'shared_user': owner,
'access_level': 'OWNER',
'created': owner.created
})
return shared_users
संबंधित सवाल
नए सवाल
django
Django एक ओपन-सोर्स सर्वर-साइड वेब एप्लीकेशन फ्रेमवर्क है जिसे पायथन में लिखा गया है। यह कम कोड, विशेष-अतिरेक पर विशेष ध्यान देने और निहित से अधिक स्पष्ट होने के साथ जटिल डेटा-संचालित वेबसाइटों और वेब एप्लिकेशन बनाने के लिए आवश्यक प्रयास को कम करने के लिए डिज़ाइन किया गया है।