这些是我的型号,一个用户可以上传多个视频,但一个视频只属于一个用户。我如何在这里使用外键概念?当我添加用户时,这会自动在视频模型中添加用户名吗?如果没有,我该怎么做?我在这里对django很新。
class User(models.Model):
first_name=models.CharField(max_length=20)
last_name=models.CharField(max_length=20)
username=models.CharField(max_length=25, primary_key=True)
password=models.CharField(max_length=15)
email_id=models.CharField(max_length=30, default='NULL')
profile_pic=models.ImageField(upload_to='profilepics/%Y/%m/%d/',default='')
def __str__(self):
return self.username
class Video(models.Model):
username=models.ForeignKey(User,on_delete=models.CASCADE,default="")
video=models.FileField(upload_to='videos/%Y/%m/%d/',default='')
videotitle=models.CharField(max_length=100)
likes=models.PositiveIntegerField(default=0)
dislikes=models.PositiveIntegerField(default=0)
def __str__(self):
return self.video
答案 0 :(得分:0)
尝试以下
from django.db import models
from django.conf import settings
class Video(models.Model):
...
username = models.ForeignKey(settings.AUTH_USER_MODEL)
您应该使用django.contrib.auth.get_user_model()引用用户模型,而不是直接引用User。此方法将返回当前活动的用户模型 - 如果指定了自定义用户模型,则返回用户模型,否则返回用户。
可以在此处找到更多信息:https://docs.djangoproject.com/en/1.8/topics/auth/customizing/#referencing-the-user-model
答案 1 :(得分:0)
不是,它不会自动执行 - 它将如何做到这一点。你需要传递用户。另外,您绝对不想添加用户名,而是添加对User对象的引用。这在代码中具有误导性,因为您在Video类中有一个“用户名”,它实际上不仅仅是一个名称(字符串),而是一个ForeignKey - 在添加新视频时对对象User的引用。因此,添加视频时需要做的是:
def add_new_video(username, filename, title):
owner = User.objects.get(username=username)
newvid = Video(username=owner, video=filename, videotitle=title)
newvid.save()
假设以后会添加好恶......