簡體   English   中英

使用外鍵在另一個Django模型中引用變量

[英]Referencing Variables in Another Django Model with Foreign Key

我有一個項目模型,用戶可以在其中添加一個帶有項目相關位置的項目。 例如,網站將是項目,而網站開發人員將是職位。 這是兩個模型。

class Project(models.Model):
    owner = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='project')
    created_at = models.DateTimeField(auto_now_add=True)
    title = models.CharField(max_length=255)
    description = models.TextField()
    complete = models.BooleanField(default=False)

    def __str__(self):
        return self.title.title()


class Position(models.Model):
    project = models.ForeignKey(Project, default='',related_name='positions')
    name = models.CharField(max_length=140)
    description = models.TextField()
    skill = models.ForeignKey(Skill, default='')
    filled = models.BooleanField(default=False)

    def __str__(self):
        return '{} - {}'.format(self.project.title.title(), self.name.title())

我創建了一個視圖,以顯示用戶的個人資料以及正在處理的任何當前或過去的項目。 見下文:

class ProfileView(LoginRequiredMixin,generic.TemplateView):
    template_name = 'accounts/profile.html'
    login_url = settings.LOGIN_REDIRECT_URL

    def get_context_data(self, **kwargs):
        context = super(ProfileView, self).get_context_data(**kwargs)
        lookup = kwargs.get('username')
        user = models.User.objects.get(username=lookup)
        profile = models.UserProfile.objects.prefetch_related('skills').get(user=user)
        context['profile'] = profile
        context['skills'] = [skill for skill in profile.skills.all()]

        projects = models.Project.objects.all()
        context['current_projects'] = projects.filter(Q(owner=user) & Q(complete=False))
        context['past_projects'] = projects.filter(Q(owner=user) & Q(complete=True))
        return context

我在弄清楚如何引用html模板中特定項目的位置時遇到了麻煩。 我知道,如果我嘗試使用python shell,我可以查詢position類並獲取所有對象,然后從那里獲取項目變量。

我試圖在這樣的視圖中創建一個位置“上下文”:

positions = m.Position.objects.all()
        context['positions'] = positions.filter(Q(owner=user)& Q(complete=False))

但是Django不喜歡該“所有者”變量-我理解這是因為我只是從位置中獲取數據。 我知道在shell中我可以執行m=Position.objects.all() ,然后執行m[0].project.title來獲取項目數據。 由於某種原因,我只是不明白如何在代碼中將它們放在一起。 任何幫助是極大的贊賞! 讓我的腦袋沉迷了一段時間!

要遍歷相關對象,可以使用模型的小寫名稱,后跟__ (2個下划線)和另一個模型中的字段名稱。

所以代替這個:

 positions.filter(Q(owner=user)& Q(complete=False)) 

這樣寫:

positions.filter(Q(project__owner=user) & Q(project__complete=False))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM