2017-03-06 2 views
0

Dies sind meine Modelle und ein Benutzer kann mehrere Videos hochladen, aber ein Video gehört nur einem Benutzer. Wie verwende ich das Fremdschlüsselkonzept hier? Füge ich beim Hinzufügen eines Nutzers automatisch einen Nutzernamen in das Videomodell ein? Wenn nicht, wie mache ich das? Ich bin sehr neu hier django überFremdschlüssel verwenden mit Benutzermodell hochladen

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

Werfen Sie einen Blick auf diese! https://docs.djangoproject.com/de/1.10/topic... –

Antwort

0

Versuchen Sie, die folgende

from django.db import models 
from django.conf import settings 

class Video(models.Model): 
    ... 
    username = models.ForeignKey(settings.AUTH_USER_MODEL) 

Statt direkt auf Benutzer zu verweisen, sollten Sie das Benutzermodell mit django.contrib.auth.get_user_model Referenz (). Diese Methode gibt das derzeit aktive Benutzermodell zurück - das benutzerdefinierte Benutzermodell, falls eines angegeben ist, oder andernfalls den Benutzer.

Weitere Informationen finden Sie hier: https://docs.djangoproject.com/en/1.8/topics/auth/customizing/#referencing-the-user-model

0

nicht, es wird nicht automatisch tun - und wie wäre es das tun. Sie müssen den Benutzer übergeben. Außerdem möchten Sie auf keinen Fall einen Benutzernamen, sondern einen Verweis auf ein Benutzerobjekt hinzufügen. Dies ist irreführend im Code, da Sie in der Video-Klasse einen "Benutzernamen" haben, der eigentlich nicht nur ein Name (String) ist, sondern ein ForeignKey - ein Verweis auf ein Objekt User beim Hinzufügen des neuen Videos. Also, was Sie tun müssen, wenn Sie ein Video hinzuzufügen, ist etwas entlang der Linien von:

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

davon aus, dass Vorlieben und Abneigungen werden später hinzugefügt ...

+0

ok ... lesen Sie den Beitrag von @Niels, es ist möglich, es automatisch auszufüllen, wenn Sie den derzeit angemeldeten Benutzer hinzufügen möchten ... aber das war nicht Teil der Frage ... – andipla

+0

Danke. Ich habs. Das Video wird jetzt ordnungsgemäß hochgeladen –

Verwandte Themen