使用django 1.11
我正在为django帐户项目使用API后端。以下是类的示例:
from __future__ import unicode_literals
from django.db import models
from django.utils import timezone
from django.conf import settings
import datetime
class Credit(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL)
name = models.CharField(max_length=200)
payment_reference = models.IntegerField()
amount = models.IntegerField()
payment_type = models.CharField(max_length=200,default='Paypal')
country = models.CharField(max_length=200,default='Ireland')
payment_location = models.CharField(max_length=200,default='On-site')
date = models.DateTimeField(auto_now_add=True)
标准用户被覆盖在另一个名为profiles的应用程序中,我已将其包含在settings.py中 - 'AUTH_USER_MODEL ='profiles.User'
from __future__ import unicode_literals
from django.db import models
from django.contrib.auth.models import AbstractUser, UserManager
from django.utils import timezone
# Create your models here.
class Profile(UserManager):
def _create_user(self, username, email, password,
is_staff, is_superuser, **extra_fields):
now = timezone.now()
if not email:
raise ValueError('The given username must be set')
email = self.normalize_email(email)
user = self.model(username=email, email=email,
is_staff=is_staff, is_active=True,
is_superuser=is_superuser,
date_joined=now, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
class User(AbstractUser):
objects = Profile()
当我尝试运行makemigrations时,我被告知我正在尝试将可空字段'user'更改为不可为空而无默认值。如果我引用活跃用户,为什么我需要默认值?我希望外键值是活动用户对象。这种方式可以过滤Credit的实例,只显示具有登录用户的外键的那些。
谢谢
答案 0 :(得分:3)
您被告知您正在尝试更改可空字段' user'在没有默认值的情况下不可为空,因为这正是你所拥有的:
user = models.ForeignKey(settings.AUTH_USER_MODEL)
如果Credit
模型存在任何现有行,则您的数据库将无法添加该列,因为您尚未指定默认值且不允许null
。
为数据库中的所有现有行填充user
列后,您可以添加非空约束。
makemigrations
脚本允许您在添加null=False
列时指定一次性默认值。如果您的表还没有任何行,这可能很有用。