python - كيفية استخدام "المستخدم" كمفتاح خارجي في جانغو 1.5
django django-users (2)
لقد صنعت نموذجًا مخصصًا للملف الشخصي يشبه هذا:
from django.db import models
from django.contrib.auth.models import User
class UserProfile(models.Model):
user = models.ForeignKey('User', unique=True)
name = models.CharField(max_length=30)
occupation = models.CharField(max_length=50)
city = models.CharField(max_length=30)
province = models.CharField(max_length=50)
sex = models.CharField(max_length=1)
لكن عندما أقوم بتشغيل manage.py syncdb
، أحصل على:
myapp.userprofile: 'المستخدم' له علاقة مع المستخدم النموذجي ، الذي لم يتم تثبيته أو غير مجرّد.
لقد جربت أيضًا:
from django.contrib.auth.models import BaseUserManager, AbstractUser
لكنه يعطي نفس الخطأ. أين أكون مخطئا وكيفية إصلاح هذا؟
بالضبط في Django 1.5 ، تم تقديم إعداد AUTH_USER_MODEL
، مما يسمح باستخدام نموذج مستخدم مخصص مع نظام المصادقة.
إذا كنت تكتب تطبيقًا يهدف إلى العمل مع المشاريع على Django 1.5 حتى 1.10 والإصدارات الأحدث ، فهذه هي الطريقة المناسبة للإشارة إلى طراز المستخدم (والذي يمكن أن يكون مختلفًا الآن عن django.contrib.auth.models.User
):
class UserProfile(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL)
- راجع docs لمزيد من التفاصيل.
في حال كنت تكتب تطبيقًا قابلاً لإعادة الاستخدام يدعم Django 1.4 أيضًا ، فمن المحتمل أن تحدد المرجع المطلوب استخدامه من خلال التحقق من إصدار Django ، ربما يعجبك هذا:
import django
from django.conf import settings
from django.db import models
def get_user_model_fk_ref():
if django.VERSION[:2] >= (1, 5):
return settings.AUTH_USER_MODEL
else:
return 'auth.User'
class UserProfile(models.Model):
user = models.ForeignKey(get_user_model_fk_ref())
غير هذا:
user = models.ForeignKey('User', unique=True)
الى هذا:
user = models.ForeignKey(User, unique=True)