gpt4 book ai didi

python - Django 不允许我保存 User 对象

转载 作者:行者123 更新时间:2023-11-30 23:37:18 24 4
gpt4 key购买 nike

当我调用User.create_user时,出现以下错误:

IntegrityError at /login
users_user.status_id may not be NULL

注意:我查看了 SO 上的许多其他 IntegrityError 问题,但无法解决此问题。

我的模型如下所示:

class Status(models.Model):
status = models.CharField(max_length=200)
status_time = models.DateTimeField('date published')

def __init__(self, status = '', time=timezone.datetime.min, *args, **kwargs):
self.status = status
self.status_time = time
super(Status, self).__init__(*args, **kwargs)

def set_status(self, s):
self.status = s
self.status_time = timezone.datetime.now()
self.save()

def get_status(self):
now = timezone.datetime.now()
if now-self.status_time<datetime.timedelta(minutes=15):
return self.status
return None

class User(models.Model):
facebook_id = models.CharField(max_length=200)
friends = ListField()
status = models.OneToOneField(Status)

@classmethod
def create_user(cls, fid, friends):
k = User()
k.facebook_id = fid
k.friends = friends
k.save() #THE PROBLEM IS HERE
k.status = Status()
k.status.set_status('')
k.status.save()
k.save()

我还是不明白 User.status_id 代表什么。为什么它在那里,为什么不能是None

最佳答案

您的问题是您将用户保存为未创建状态。先创建一个状态,然后就可以保存用户了:

   def create_user(cls, fid, friends):
k = User()

k.status = Status()
k.status.set_status('') # set_status saves the status

k.facebook_id = fid
k.friends = friends
k.save()

或者更好:

   def create_user(cls, fid, friends):
status = Status()
status.set_status('')
User.objects.create(facebook_id=fid, friends=friends, status=status)

 

在惯用的 django 代码中,像 create_user 这样的方法应该位于模型管理器上:

class UserManager(models.Manager):
def create_user(self, fid, friends):
status = Status()
status.set_status('')
return self.create(facebook_id=fid, friends=friends, status=status)


class User(models.Model):
facebook_id = models.CharField(max_length=200)
friends = ListField()
status = models.OneToOneField(Status)

objects = UserManager()

然后你这样调用它:

new_user = User.objects.create_user(fid, friends)

 

然后您会发现,如果只有默认状态,您可以只使用内置的 objects.create:

# A custom manager is no longer needed

class User(models.Model):
facebook_id = models.CharField(max_length=200)
friends = ListField()
status = models.OneToOneField(Status)

def save(self, *a, **kw):
# if this user doesn't have a status yet, create an empty one
if self.status is None:
self.status = Status()
self.status.set_status('')

super(User, self).save(*a, **kw)

# creating users:

new_user = User.objects.create(facebook_id=fid, friends=friends)

# status is set to an empty one automatically in save

关于python - Django 不允许我保存 User 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15712197/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com