为什么外键字段为空?

2024-04-26 06:07:40 发布

您现在位置:Python中文网/ 问答频道 /正文

使用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的应用程序中被重写了,我已经在设置.py-'AUTH\u USER\u MODEL='配置文件.用户'

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时,我被告知我正在尝试将可为null的字段“user”更改为不可为null的字段,而不使用默认值。如果我正在引用活动用户,为什么我需要一个默认值?我希望外键值是活动用户对象。这样就可以过滤信用实例,只显示那些带有登录用户外键的信用实例。你知道吗

谢谢


Tags: django用户fromimportselfdbismodels
1条回答
网友
1楼 · 发布于 2024-04-26 06:07:40

您被告知正在尝试将可为null的字段“user”更改为不可为null,而不使用默认值,因为这正是您所拥有的:

user = models.ForeignKey(settings.AUTH_USER_MODEL)

如果Credit模型有任何现有行,则数据库将无法添加该列,因为您没有指定默认值,并且不允许null。你知道吗

一旦为数据库中的所有现有行填充了user列,就可以添加notnull约束。你知道吗

makemigrations脚本允许您在添加带有null=False的列时指定一次性默认值。如果您的表还不包含任何行,这将非常有用。你知道吗

相关问题 更多 >