簡體   English   中英

如何在具有用戶 model 外鍵的 model 中定義 __str__() 方法並獲取 Django 中的字段值?

[英]How do I define __str__() method in a model which has a Foreign Key of User model and get the values of fields in Django?

我在我的 Django 應用程序中具有以下 model 並且它具有 Django 的默認用戶 Model 的外鍵和__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 f'{self.user.username}'

當我們在管理面板中打開主題模型/表時,我想在管理面板中顯示主題名稱。 假設如果我們有一個用戶名為“khubi”的用戶並且他有兩個主題,那么管理面板只顯示用戶的用戶名“khubi”,而不是顯示主題的名稱。 下面是截圖:

主題.png

我試圖把這個:

return f'{self.user.username.subject}'

但它給出的錯誤是'str' object has no attribute 'subject'

我也試過了:

return f'{self.user.subject}'

它給了我錯誤'User' object has no attribute 'subject'

如何在__str__()方法以及外部的任何地方獲取主題的名稱?

您需要調用self.subject作為主題。

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)

給定的代碼將返回some_subject (khubi)

return f'{self.subject}'

是您訪問字段subject的正確方式,因為self.user.subject不是用戶字段的一部分。 也許您應該在用戶的字段定義中添加一個related_name ,如下所示:

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

通過這種方式,您可以從用戶訪問他們提交的主題,只需向用戶 object 詢問其主題: subjects = user.subjects作為其他字段。

暫無
暫無

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

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