ForeignKey to a Model field?
Solution 1
You can't have an ForeignKey to a field, but you can to a row.
You want username
which is available through the User
model
So:
blog.user.username
If you insist on having blog.username
you can define a property like this:
from django.db import models
from django.contrib.auth.models import User
class Blog(models.Model):
user = models.ForeignKey(User)
Then to access the field you want use:
blog.user.username
If you insist on having blog.username
you can define a property like this:
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
With that property, you can access username
through blog.username
.
Note on how to import User
user = ForeignKey('auth.User')
or
from django.contrib.auth.models import User
user = ForeignKey(User)
or the more recommended
from django.conf import settings
user = ForeignKey(settings.AUTH_USER_MODEL)
Solution 2
Unless I'm missing something, you can have a ForeignKey to a specific field:
class Blog(models.Model):
username = models.ForeignKey(User, to_field='username')
https://docs.djangoproject.com/en/1.11/ref/models/fields/#django.db.models.ForeignKey.to_field
Anish Silwal
I'm a beginner. I'm learning Django python. In the process I want to create something like a blog site.
Updated on June 15, 2022Comments
-
Anish Silwal about 2 years
I want a
foreign key
relation in my model with theusername
field in theUser
table(that stores theuser
created withdjango.contrib.auth.forms.UserCreationForm
).This how my model looks:
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()
The
username
field should be the foreign key.The Foreign Key should be with this field