मैं 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'

मैन्युअल रूप से जेनरेट किए गए ऑब्जेक्ट को क्वेरीसेट ऑब्जेक्ट में जोड़ना संभव है? यदि हाँ तो कैसे?

0
Anuj TBE 8 फरवरी 2019, 12:38

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
}])

लेकिन नीचे की ओर है, आप एक क्वेरीसेट की समर्थन कार्यक्षमता खो देंगे। तो आपको इसे एक सूची की तरह उपयोग करने की आवश्यकता है।

0
ruddra 8 फरवरी 2019, 13:04

आप देखिए, इसमें माजरा कहां है।

# 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
-1
Marin 8 फरवरी 2019, 12:51