انجمنهای فارسی اوبونتو
کمک و پشتیبانی => برنامهسازی => نویسنده: 🇮🇷 در 26 تیر 1401، 07:11 بظ
-
سلام
میخوام یه مدل شخصیسازی شده کاربر در یه پروژه جنگو بسازم. هر جایی که دیدم میگن باید قبل از اولین migration پروژه این کار انجام بشه. پروژه من جدید نیست. آیا راهی داره که وسط پروژه مدل کاربر جنگو رو شخصیسازی کرد؟
-
درود !
منظورت از کاربر شخصی سازی شده دقیقا چی هست ؟
-
من یک بار قبلا وسط پروژه اینکار رو کردم. سخته کمی. باید جاهای مختلف که از کلاس کاربر به شکل غیر استاندارد استفاده شده تغییر اعمال کنید. شاید اگر کمی بیشتر توضیح بدید چه کار میخواید انجام بدید بشه راهکار دیگهای داد. برای مثال اضافه کردن یه جدول Profile عموما میتونه تو این جور مواقع کمک کنه.
-
من یک بار قبلا وسط پروژه اینکار رو کردم. سخته کمی. باید جاهای مختلف که از کلاس کاربر به شکل غیر استاندارد استفاده شده تغییر اعمال کنید. شاید اگر کمی بیشتر توضیح بدید چه کار میخواید انجام بدید بشه راهکار دیگهای داد.
میخوام کاربر، همون کاربر جنگو باشه فقط یه ویژگی بیشتر داشته باشه.
برای مثال اضافه کردن یه جدول Profile عموما میتونه تو این جور مواقع کمک کنه.
میشه بیشتر توضیح بدید؟
-
در ابتدا یک نکته اینکه: داکیومنت جنگو پیشنهاد میکنه همیشه در ابتدای یک پروژه حتی اگر کلاس کاربر کار شما رو راه میاندازه اون رو extend کنید تا در آینده اگر تغییر این چنینی لازم شد بدون مشکل بتونید اون رو اعمال کنید.
برای حل این مسئله میتونید یک کلاس پروفایل در نظر بگیرید با ویژگیهای مورد نظر و یک ارتباط یک به یک با کلاس کاربر بینشون ایجاد کنید. برای مثال اینجا رو ببنید:
https://stackoverflow.com/a/37348787/14017072
-
میخوام کاربر، همون کاربر جنگو باشه فقط یه ویژگی بیشتر داشته باشه.
https://stackoverflow.com/a/6092091
https://stackoverflow.com/a/34427137
https://stackoverflow.com/a/34427137
-
ممنون از جماب میلاد و سامیت. نگاه میکنم اگر مشکلی بود اطلاع میدم ان شاء الله
-
یه سوال. الآن من مدل Profile رو در اپ users که برای مدیریت کاربرها هست ساختم. این دو خط اول مدل هست:
user = OneToOneField(User, on_delete=models.CASCADE)
ticket = 10
الآن باید چیکار کنم که وقتی یه کاربر ساخته میشه، وقتی به user.profile.ticket کاربر جدید یا کاربرهای قدیمی مراجعه کنم ۱۰ رو ببینم؟ یعنی چطور به این ۱۰ دسترسی داشته باشم؟ به محتوای ذیل که در شل جنگو اتفاق افتادن نگاه کنید:
>>> user = User.objects.get(username="reza")
>>> user.profile
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/reza/.local/lib/python3.10/site-packages/django/db/models/fields/related_descriptors.py", line 461, in __get__
raise self.RelatedObjectDoesNotExist(
django.contrib.auth.models.User.profile.RelatedObjectDoesNotExist: User has no profile.
-
تو همون شل میتونید یک bulk_create جهت ایجاد پروفایل برای تمام کاربرانی که از پیش وجود دارند انجام بدید. برای کاربران جدید هم عموما از سیگنالها استفاده میشه.
-
تو همون شل میتونید یک bulk_create جهت ایجاد پروفایل برای تمام کاربرانی که از پیش وجود دارند انجام بدید. برای کاربران جدید هم عموما از سیگنالها استفاده میشه.
خیلی ممنون. درست شد.