2014-12-29 4 views
1

작성한 사용자와 수정하는 사용자를 내 클래스에 추가하고 싶습니다. 오류가 발생 했으므로 여러 방법을 시도했습니다.이 중 마지막 시도입니다.django models.py의 사용자 모델을 어떻게 관련시켜야합니까?

내가 사용하는 올바른 방법이 있습니까?

from django.db import models 

from django.conf import settings 

def userDefault(): 
return settings.AUTH_USER_MODEL 

class Ambito(models.Model): 
    nombre = models.CharField(max_length=150, verbose_name="Ambito") 
    usuarioCreacionAmbito = models.ForeignKey(settings.AUTH_USER_MODEL,related_name="usuarioCreacionAmbito", default=userDefault) 
    usuarioModificacionAmbito = models.ForeignKey(settings.AUTH_USER_MODEL, related_name="usuarioModificacionAmbito", default=userDefault) 
    fechaCreacion = models.DateTimeField(auto_now_add=True) 
    fechaModificacion = models.DateTimeField(auto_now=True) 
    def __str__(self): 
     return u"%s" % self.nombre 

class Componentes(models.Model): 
    nombre = models.CharField(max_length=150) 
    ambito = models.ForeignKey(Ambito) 
    obligatorio = models.BooleanField(default=False) 
    usuarioCreacionComponentes = models.ForeignKey(settings.AUTH_USER_MODEL, related_name="usuarioCreacionComponentes", default=userDefault) 
    #usuarioModificacionComponentes = models.ForeignKey(settings.AUTH_USER_MODEL, related_name="usuarioModificacionComponentes", default=userDefault) 
    fechaCreacion = models.DateTimeField(auto_now_add=True) 
    fechaModificacion = models.DateTimeField(auto_now=True) 
    def __str__(self): 
     return u"%s" % self.nombre 

class Caracteristicas(models.Model): 
    nombre = models.CharField(max_length=200) 
    componentes = models.ForeignKey(Componentes) 
    usuarioCreacionCaracteristicas = models.ForeignKey(settings.AUTH_USER_MODEL, related_name="usuarioCreacionCaracteristicas", default=userDefault) 
    usuarioModificacionCaracteristicas = models.ForeignKey(settings.AUTH_USER_MODEL, related_name="usuarioModificacionCaracteristicas", default=userDefault) 
    fechaCreacion = models.DateTimeField(auto_now_add=True) 
    fechaModificacion = models.DateTimeField(auto_now=True) 
    def __str__(self): 
     return u"%s" % self.nombre 

class Verificadores(models.Model): 
    nombre = models.CharField(max_length=200) 
    caracteristicas = models.ForeignKey(Caracteristicas) 
    usuarioCreacionVerificadores = models.ForeignKey(settings.AUTH_USER_MODEL, related_name="usuarioCreacionVerificadores", default=userDefault) 
    usuarioModificacionVerificadores = models.ForeignKey(settings.AUTH_USER_MODEL, related_name="usuarioModificacionVerificadores", default=userDefault) 
    fechaCreacion = models.DateTimeField(auto_now_add=True) 
    fechaModificacion = models.DateTimeField(auto_now=True) 
    def __str__(self): 
     return u"%s" % self.nombre 

이 오류

ValueError: invalid literal for int() with base 10: 'auth.User' 

어쩌면 내가 잘못, 내 목표는 사용자가 무언가를 추가 할 때마다 사용자의 값을 설정하는 것입니다 설명이다가, 내 말은, 사용자에 행을 추가 할 때

name='Juan', last='perez' 
,369 : 내가있는 행을 추가하는 경우

을 : 데이터베이스는 자동으로 다음과 같은 행을 추가하려면 사용자를 저장

는 내 모델은 문제가 당신이 행해져 Yout 외래 키 기본 값으로 (기본적으로 'auth.User'이다) settings.AUTH_USER_MODEL을 할당하는 것입니다

name='Juan', last='perez', user=userId 
+0

당신이 시도해야하는 것은, 당신이 django.contrib.auth.models에서'User' 모델 '로 User'를 가져올 연결하여 사용해야이 – abhishekgarg

+0

@abhishekgarg 아니, 그건 문제가 아니야. FK로 AUTH_USER_MODEL을 사용하면 올바른 값으로 사용됩니다. –

+0

흠 .. 그게, 고마워, – abhishekgarg

답변

0

을 절약 할 수 있습니다. 기본값은 정수 (관련 User 모델의 pk) 또는 사용자 인스턴스 일 수 있지만 'auth.User'는 사용자가 제공하는 값입니다.

0

userDefault 함수의 반환 값에 문제가 있습니다. suselrd가 지적했듯이, "auth.User"이며, 이는 외래 키에서 사용하기에 적합한 값이 아닙니다.

그러나 문제는 반환하는 값보다 더 깊습니다. 을 장고에서 사용할 수 없으면 원하는 기능을 수행 할 수 없습니다. 이 함수는 현재 사용자에 대한 액세스 권한이 없습니다. 즉, request 개체에서만 가져올 수 있으며 기본 호출 가능 호출에서 해당 호출을 전달할 수있는 방법은 없습니다. 다른 것들은 따로하고, 모델은 예를 들어 셸이나 관리 명령과 같이 요청 외부에서 인스턴스화 될 수 있으며 "현재 사용자"는 무엇이 될까요?

현재 사용자를 설정하는 유일한 방법은보기에서 수행하는 것입니다. 대신`settings.AUTH_USER_MODEL`으로 연결하는

관련 문제