外键与用户模型上传一起使用

Posted

技术标签:

【中文标题】外键与用户模型上传一起使用【英文标题】:Foreign key use with user model upload 【发布时间】:2017-07-26 06:42:22 【问题描述】:

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

【问题讨论】:

看看这个! docs.djangoproject.com/en/1.10/topic… 【参考方案1】:

试试下面的

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

【讨论】:

【参考方案2】:

不,它不会自动执行 - 以及它是如何执行此操作的。您需要通过用户。此外,您绝对不想添加用户名,而是对 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()

假设稍后会添加好恶...

【讨论】:

好的...阅读@Niels 的帖子,如果您想添加当前登录的用户,可以自动填写...但这不是问题的一部分.. . 谢谢。知道了。视频正在正确上传

以上是关于外键与用户模型上传一起使用的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 中迁移外键与雄辩的关系

jango 模型管理数据model,数据库外键主键与一对一,一对多,多对多关系

Java学习总结(十六)——MySQL数据库(中)分组,嵌套,连接查询及外键与关系表设计

使用与默认用户模型具有外键关系的 Django 模型

如何使用 on_delete 属性在用户模型的外键字段中设置用户全名?

使用外键查询 Django 模型并获取登录用户