Я кодирую всплывающую подсказку для панели инструментов Django, поэтому в одном из сценариев говорится, что, когда пользователь не подключил свою учетную запись Github, ссылка на репозиторий будет отключена.Я уже решил проблему, но не понял, что она работает только для владельца репо, поэтому, если я добавлю кого-то еще в качестве соавтора, ссылка будет работать для них, потому что они не являются владельцами.
models.py
class Project(models.Model):
owner = models.ForeignKey(
TeamMember,
related_name="github_repos",
blank=True,
null=True,
on_delete=models.SET_NULL,
)
members = models.ManyToManyField(
TeamMember,
related_name="new_projects",
blank=True,
through=ProjectMember,
)
class TeamMember(models.Model):
class Meta:
unique_together = ("team", "user_id")
django_user = models.OneToOneField(
settings.AUTH_USER_MODEL,
related_name="team_member",
null=True,
on_delete=models.SET_NULL,
)
team = models.ForeignKey(
Team, related_name="members", on_delete=models.SET_NULL, null=True
)
github_username = models.CharField(max_length=100, blank=True)
Таким образом, в принципе, я решил проблему следующим образом:
def html_message(self):
pattern = re.compile("Github Repository", re.IGNORECASE)
if self.project.owner.has_connected_github:
git_connection = self.project.owner.django_user.socialaccount_set.filter(
provider="github"
).first()
if git_connection:
html_message = pattern.sub(
f"<a href='{self.project.html_url}'>Github Repository</a>", self.message
)
else:
html_message = pattern.sub(
f"<a href='#' data-toggle='tooltip' title='Connect your Github account to access repository.'>Github Repository</a>", self.message
)
Это работает, но, как я уже говорил, только для владельцаприложения мне нужно знать, как получить доступ к members
вместо owner
, потому что, как вы можете видеть, это поле «многие ко многим».
Есть идеи, как мне получить к нему доступ?Я видел похожие вопросы, но не до конца их понимаю.