انجمنهای فارسی اوبونتو
کمک و پشتیبانی => برنامهسازی => نویسنده: سید حسین موسوی فرد در 02 خرداد 1401، 04:41 بظ
-
سلام.
نیاز دارم که یکی از فیلد ها تو یه مدل رو لینک کنم به یه فیلد دیگه تو یه مدل دیگه که بشه یادداشت رو به اشتراک گذاشت
یه راه اینه که وقتی یکی یادداشت خودشو ویرایش کرد رو یادداشت های بقیه هم بنویسه که دو تا مشکل داره. یکی این که اگه با نفر های زیادی به اشتراک گذاشته شده باشه زمان می بره تا روی همه اونا بنویسه و هم فضای بیشتری می گیره.
خود جنگو راهی نداره؟
-
دقیقتر بگو میخوای چی کار کنی و مدلهایی که نوشتی رو هم بذار ببینیم چی به چیه.
-
class Note(models.Model):
title = models.CharField(max_length=24)
notebook = models.ForeignKey(NoteBook, on_delete=models.CASCADE, null=True)
user = models.ForeignKey(User, on_delete=models.CASCADE)
noteType = models.CharField(max_length=24)
datetime = models.DateTimeField(auto_now=True)
content = models.TextField(blank=True)
allowed_types = ['note', 'kanban', 'table']
def __str__(self):
return f"{self.user}/{self.notebook.title}/{self.title}"
class ShareRequest(models.Model):
sender = models.ForeignKey(User, on_delete=models.CASCADE)
reciver = models.ForeignKey(User, on_delete=models.CASCADE)
note = models.ForeignKey(User, on_delete=models.CASCADE)
request_time = models.DateTimeField(auto_created=True)
فرضا طرف یه یادداشت داره و میخواد اونو با یکی دیگه همرسانی کنه پس اشتراک رو میزنه و نام کاربری طرف رو وارد می کنه بعد یه درخواست برای طرف میره. بعد اگه طرف قبول کنه درخواست رو یه مدل Note براش ایجاد بشه که فیلد هاش لینک بشه به فیلد های یادداشت اصلی. برای این کار تو جنگو دستوری پیدا نکردم.
البته همین الان به ذهنم رسید که وقتی درخواست قبول شد یه مدل Note ایجاد بشه که ForiegnKey داشته باشه به اون یادداشت اصلی ولی نمی دونم شاید روش قبلی بهتر باشه.
-
به ازای هر کاربری که درخواستی رو میپذیره، یه مدل SharedNote بساز که یه کلید خارجیش بشه Note، اون یکیش هم بشه کاربری که باهاش همرسانی شده.
-
یعنی همچین چیزی؟
class SharedNote(models.Model):
note = models.ForeignKey(Note, on_delete=models.CASCADE)
user = models.ForeignKey(User, on_delete=models.CASCADE)
-
بله
-
کلیک روی دکمه تشکر. :D