मैं अपने प्रोजेक्ट के लिए कुछ प्रकार का रिफैक्टरिंग कर रहा हूं, जहां मैं django django.contrib.auth.models.Permission
मॉडल पर निर्भर हूं। अब तक मैं प्रत्येक नए उपयोगकर्ता के लिए post_save सिग्नल का उपयोग करके अनुमतियों को परिभाषित करता हूं, इसलिए जब उपयोगकर्ता बनाया जाता है, तो मैं user.user_permissions.add(the_permission)
का उपयोग करके अपनी अनुमतियां असाइन करता हूं, यह पूरी तरह से काम करता है।एक कस्टम post_migrate सिग्नल को परिभाषित करना
अब मैं मॉडल का उपयोग करना चाहता हूं ताकि उपयोगकर्ता को अनुमतियों को स्पष्ट किया जा सके।
from django.apps import AppConfig
from django.db.models.signals import post_migrate
from django.contrib.auth.models import Group, Permission
def create_group(name, permissions):
group = Group.objects.create(name=name)
[group.permissions.add(permission) for permission in permissions]
def define_company_groups(sender, **kwargs):
permissions = [
Permission.objects.get(codename='add_mymodel'),
Permission.objects.get(codename='change_mymodel'),
]
create_group('managers', permissions)
class MyAppConfig(AppConfig):
name = 'players'
verbose_name = 'The players app'
def ready(self):
post_migrate.connect(define_company_groups, sender=self)
के बाद इस कोड को परिभाषित करते हैं, मैं उम्मीद कर रहा हूँ कि कॉल ./manage.py migrate
के बाद इस हैंडलर निकाल दिया जाना चाहिए:
यह मेरा कोड है। लेकिन यह नहीं होता है, सब मुझे मिल गया है:
Running post-migrate handlers for application players
Adding permission 'players | mymodel | Can add mymodel'
Adding permission 'companies | company | Can change mymodel'
Adding permission 'companies | company | Can delete company'
मैं इस https://groups.google.com/forum/#!topic/django-developers/8MdaWtJp4VQ लेख मिल जाए, वे कहते हैं कि मैं management.py
नाम की एक फ़ाइल के अंदर अपने post_migrate हैंडलर परिभाषित करना चाहिए (न models.py
फ़ाइल में कोड सहित), लेकिन काम नहीं करता
अंत में, मेरा प्रश्न है: मुझे यह कोड मेरे कस्टम post_migrate सिग्नल के लिए कहां रखा जाना चाहिए?
अग्रिम धन्यवाद।
आप Django को 'MyAppConfig' का उपयोग करने के लिए कैसे कह रहे हैं? आपकी 'INSTALLED_APPS' सेटिंग में? – Alasdair
वास्तव में केवल 'INSTALLED_APPS' tuple में ऐप नाम जोड़कर, पर्याप्त होना चाहिए या क्या मुझे एक और कॉन्फ़िगरेशन जोड़ना चाहिए? – slackmart