با سلام.
من هنوز این دوره رو ندیدم اما دوره قبلی جنگو آقای اردوخانی رو مشاهده کردم و سوالی برام پیش آمد که بدون پاسخ مونده.
فرض کنید من دو مدل در پروژه جنگو دارم. یک مدل مربوط به خبر و یک مدل هم مدل پیش فرض جنگو برای کاربر هستش.
هر کاربر که مدیر هم باشه می تونه چندین خبر در سایت درج کنه اما هر خبر تنها به یک کاربر مربوط می شه. بنابراین رابطه کاربر و خبر، رابطه یک به چند هستش.
خب حالا می خوام کاری کنم که وقتی کاربر وارد قسمت مدیریت سایت می شه و یک خبر جدید درج می کنه، بعد از زدن کلید «ذخیره»، خود جنگو خود به خود همون کاربر رو به عنوان نویسنده خبر در بانک ذخیره کنه و لازم نباشه که به صورت دستی، کاربر از لیست کاربران انتخاب بشه.
برای همین چیزی باید چی کار کنم؟
سلام خدمت شما دوست عزیز
برای این مورد میتونین از signal ها در جنگو استفاده کنین
این لینک بهتون کمک میکنه :
متاسفانه نتونستم چیزی پیدا کنم. اون طوری که می دونم در ASP .NET هم نمی شه در خارج از view به کاربر فعلی دسترسی داشت. منتهی اون جا چون قسمت مدیریت رو خود برنامه نویس می سازه می تونه کاربر فعلی رو به متدهای دیگه پاس بده اما در جنگو نمی دونم این کار رو چطور باید انجام داد.
بله منطقی هستش اما فکر میکنم یک روش وجود داشت
import inspect, os
@receiver(post_save, sender=MyModel)
def get_user_in_signal(sender, **kwargs):
for entry in reversed(inspect.stack()):
if os.path.dirname(__file__) + '/views.py' == entry[1]:
try:
user = entry[0].f_locals['request'].user
except:
user = None
break
if user:
# do stuff with the user variableاین کد رو هم امتحان کنین
معمولا پیاده سازی همچین قابلیتی در ادمین خود جنگو مقدار مشکل ساز هستش و پیشنهاد میشه یک ادمین customize شده ایجاد کنین
ممنون به خاطر پاسخگویی.
جواب رو پیدا کردم. می شه خیلی راحت از طریق override کردن متد save_model به کاربر فعلی دسترسی پیدا کرد.
من خودم از این روش استفاده کردم و جواب داد.