Python 我如何在一个具有User model外键的模型中定义_str__;()方法,并获取Django中字段的值?

Python 我如何在一个具有User model外键的模型中定义_str__;()方法,并获取Django中字段的值?,python,django,Python,Django,我的Django应用程序中有一个以下模型,它有一个Django默认用户模型的外键,带有一个_str____方法 当我们在管理面板中打开主题模型/表时,我想在管理面板中显示主题名称。假设我们有一个用户名为'khubi'的用户,他有两个主题,那么管理面板只显示用户的用户名'khubi',而不显示主题的名称。以下是截图: 我试着说: return f'{self.user.username.subject}' 但它给出的错误是“str”对象没有属性“subject” 我也试过: return f'{

我的Django应用程序中有一个以下模型,它有一个Django默认用户模型的外键,带有一个_str____方法

当我们在管理面板中打开主题模型/表时,我想在管理面板中显示主题名称。假设我们有一个用户名为'khubi'的用户,他有两个主题,那么管理面板只显示用户的用户名'khubi',而不显示主题的名称。以下是截图:

我试着说:

return f'{self.user.username.subject}'
但它给出的错误是“str”对象没有属性“subject”

我也试过:

return f'{self.user.subject}'
它给我的错误是“User”对象没有属性“subject”

如何在_str_____________________________________________

class Subject(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, max_length=100)
    subject = models.CharField(max_length=100)

    def __str__(self):
        return '{} ({})'.format(self.subject, self.user.username)
给定的代码将返回一些主题khubi

是访问字段主题的正确方式,因为self.user.subject不属于用户字段。也许您应该在用户的字段定义中添加一个相关的_名称,如下所示:

class Subject(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE,
                                max_length=100, related_name='subjects')
    # ...

通过这种方式,您可以从用户访问他们提交的主题,只需向用户对象询问其主题:subjects=user.subjects作为others字段。

以及如何获取此模型之外特定用户的某个主题的名称,假设在任何模板中使用表单?非常感谢@Hisham_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuPak,它成功了。请你告诉我问题的答案,我在上面的评论中问过。你能更清楚一点你想要实现什么吗?我有另一个模型,名为Detailmodels.model,其中onetoonefied为subject=models.onetoonefieldpubject,在_delete=models.CASCADE上显示主题模型,在_delete=models.ForeignKeyUser上显示用户模型的外键,在_delete=models.CASCADE上显示其他一些字段,如中间分数、最终分数等。如果我想获得主题的详细信息,我该怎么做?比如说用户“khubi”的“数学”?谢谢@Shanks,你能在另一部分帮助我吗?我有另一个名为Detailmodels.model的模型,它的OneToOneFieldSubject定义为subject=models.OneToOneFieldSubject,on_delete=models.CASCADE表示主题模型,外键表示用户模型User=models.ForeignKeyUser,on_delete=models.CASCADE表示中间标记等其他字段,期末成绩等。如果我想了解某个主题的细节,比如说用户“khubi”的“数学”,我该怎么做?
return f'{self.subject}'
class Subject(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE,
                                max_length=100, related_name='subjects')
    # ...