簡體   English   中英

Django模型,使用用戶名

[英]Django models, using username

models.py,它不起作用。 我已經嘗試了一切。

class UserProfile(models.Model):
        user = models.OneToOneField(User)
        titulo = models.CharField(max_length=50, default= user.get_username())
        descripcion = models.TextField()

喚醒服務器時出錯“OneToOneField沒有屬性get_username”。 我想使用自己的用戶名為用戶設置默認的個人資料頁面標題。

在類聲明時指定動態默認值是行不通的,因為Python只在應用程序啟動時分析此代碼,而不是在保存實際實例時分析。

而是覆蓋模型的save()方法以檢查titulo是否為空。 如果是,則可以將其設置為user.get_username()如下所示:

# models.py
class UserProfile(models.Model):
    user = models.OneToOneField(User)
    titulo = models.CharField(max_length=50, blank=True, default="")
    descripcion = models.TextField()

    def save(self, *args, **kwargs):
        # If titulo is empty set it to the username.
        if not self.titulo:
            self.titulo = self.user.get_username()

        # Now call the save() method on super to store the instance.
        super(UserProfile, self).save(*args, **kwargs)

另一個問題是,如果你真的想username保存為titulo 這樣,如果用戶更改了用戶名,則必須跟蹤該用戶並同步該字段,這會在代碼中添加更多內務處理邏輯。

允許titulo為空並且在您的視圖或模板中檢查是否為空,可能更容易titulo不容易出錯。 如果是,您仍然可以渲染user.get_username() ,否則您可以渲染titulo

暫無
暫無

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

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