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)




django-users