2017-03-06 26 views
0

这些是我的模型,一个用户可以上传多个视频,但一个视频只属于一个用户。我如何在这里使用外键概念?当我添加用户时,这是否会自动在视频模型中添加用户名?如果不是,我该怎么做?我很新的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

看看这个! https://docs.djangoproject.com/en/1.10/topic... –

回答

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( )。此方法将返回当前活动的用户模型 - 自定义用户模型(如果指定了),否则返回用户。

更多信息可以在这里找到:https://docs.djangoproject.com/en/1.8/topics/auth/customizing/#referencing-the-user-model

0

不是,它不会自动做 - 以及如何将它做到这一点。你需要传递用户。此外,您绝对不想添加用户名,而是对用户对象的引用。这在代码中会产生误导,因为您在Video类中有一个“用户名”,它不仅仅是一个名称(字符串),而且是一个ForeignKey - 在添加新视频时对对象用户的引用。因此,你需要添加一个视频的时候做的是沿着线的东西:

def add_new_video(username, filename, title): 
    owner = User.objects.get(username=username) 
    newvid = Video(username=owner, video=filename, videotitle=title) 
    newvid.save() 

假设好恶将于稍后加入...

+0

好的...从@Niels阅读帖子,如果你想添加当前登录的用户,可以自动填写......但是那不是问题的一部分... – andipla

+0

谢谢。得到它了。该视频现在正在正确上传 –