Uso Django 1.5 e sto provando a far funzionare un'applicazione con qualsiasi modello utente personalizzato. Ho modificato l'app per utilizzare get_user_model
ovunque e l'app non presenta alcun problema fino a quel momento.Test con un modello utente personalizzato come ForeignKey in Django 1.5
Il problema è che voglio essere in grado di testare l'app, ma non riesco a trovare un modo per testare correttamente i campi del modello ForeignKey
utilizzando modelli utente personalizzati. Quando eseguo il banco di prova di seguito allegata, ottengo questo errore:
ValueError: Cannot assign "<NewCustomUser: [email protected]>": "ModelWithForeign.user" must be a "User" instance.
Questo è il file che sto utilizzando per il test:
from django.conf import settings
from django.contrib.auth import get_user_model
from django.contrib.auth.tests.custom_user import CustomUser, CustomUserManager
from django.db import models
from django.test import TestCase
from django.test.utils import override_settings
class NewCustomUser(CustomUser):
objects = CustomUserManager()
class Meta:
app_label = 'myapp'
class ModelWithForeign(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL)
@override_settings(
AUTH_USER_MODEL = 'myapp.NewCustomUser'
)
class MyTest(TestCase):
user_info = {
'email': '[email protected]',
'date_of_birth': '2013-03-12',
'password': 'password1'
}
def test_failing(self):
u = get_user_model()(**self.user_info)
m = ModelWithForeign(user=u)
m.save()
Sto riferimento al modello di utente nell'argomento ForeignKey
elencare come descritto here, ma utilizzando get_user_model
non viene modificato nulla, poiché l'attributo user
viene valutato prima che avvenga la modifica dell'impostazione. C'è un modo per far suonare questo ForeignKey con i test quando utilizzo modelli utente personalizzati?
Non è correlato al fatto che si tratta di un'impostazione a livello di sito e non di un'impostazione specifica dell'app? La soluzione sembra avere un buon senso! – benjaoming
@benjaoming in realtà perché lo schema non viene ricostruito tra i test (e in realtà non dovrebbe), il che rende inutilizzabile l'attributo swappable in questo caso, poiché definisce quale tabella esiste realmente. Puoi scambiare praticamente qualsiasi altra cosa e i [documenti] (https://docs.djangoproject.com/en/dev/topics/testing/overview/#django.test.utils.override_settings) mostrano alcuni esempi di larghezza del sito impostazioni che possono essere sovrascritte. – fcoelho