ForeignKey到Model字段?

Ani*_*wal 2 python django django-models django-database django-users

我希望foreign key我的模型中的关系与表中的username字段User(存储user创建的django.contrib.auth.forms.UserCreationForm).

我的模型看起来如何:

class Blog(models.Model):
    username = models.CharField(max_length=200) // this should be a foreign key
    blog_title = models.CharField(max_length=200)
    blog_content = models.TextField()
Run Code Online (Sandbox Code Playgroud)

username字段应该是外键.外键应该在此字段中

小智 10

除非我遗漏了某些内容,否则您可以将ForeignKey用于特定字段:

class Blog(models.Model):
    username = models.ForeignKey(User, to_field='username')
Run Code Online (Sandbox Code Playgroud)

https://docs.djangoproject.com/en/1.11/ref/models/fields/#django.db.models.ForeignKey.to_field

  • @CS 唯一性约束如何“一般不起作用”?请注意,问题是关于“模型字段的外键”,正如我们所知,它确实必须是唯一的,因为这就是外键,“多对一关系”,意味着来自博客表与用户表中的“一条”记录相关。如果相关字段(用户名)不唯一,并且有 3 条记录具有相同的值(例如 John123),则无法将博客与用户相关联,因为用户有超过 1 条记录具有相同的值可供选择的字段值(用于用户名)。 (2认同)

bak*_*kal 5

你不能有一个ForeignKey到一个字段,但你可以连续.

您想要username通过User模型获得哪些

所以:

blog.user.username
Run Code Online (Sandbox Code Playgroud)

如果你坚持让blog.username你可以定义这样的属性:

from django.db import models
from django.contrib.auth.models import User

class Blog(models.Model):
    user = models.ForeignKey(User)
Run Code Online (Sandbox Code Playgroud)

然后访问您想要使用的字段:

blog.user.username
Run Code Online (Sandbox Code Playgroud)

如果你坚持让blog.username你可以定义这样的属性:

from django.db import models
from django.contrib.auth.models import User

class Blog(models.Model):
    user = models.ForeignKey(User)

    @property
    def username(self):
        return self.user.username
Run Code Online (Sandbox Code Playgroud)

与该属性,您可以访问username通过blog.username.

关于如何导入用户的注意事项

user = ForeignKey('auth.User')
Run Code Online (Sandbox Code Playgroud)

要么

from django.contrib.auth.models import User
user = ForeignKey(User)
Run Code Online (Sandbox Code Playgroud)

或者更推荐

from django.conf import settings
user = ForeignKey(settings.AUTH_USER_MODEL)
Run Code Online (Sandbox Code Playgroud)