对于这个令人费解的问题感到抱歉,但我是一名未经过任何培训而被投入Django框架的单身学生,我会在短时间内尽力理解这一切。我真的很喜欢Django,但我无法弄清楚我遇到的一个问题。
因此,对于分配,我需要扩展默认的admin users表以包含更多字段。这就是我所做的:
模型:
class UserInfo(models.Model):
user = models.OneToOneField(User,
on_delete=models.CASCADE)
userTypeID = models.ForeignKey(UserType)
dob = models.DateField()
contactNumber = models.IntegerField()
address = models.CharField(max_length=50)
@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
if created:
UserInfo.objects.create(user=instance)
UserInfo.save(instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.userinfo.save()
def __str__(self):
return str(self.user)
管理员:
class UserInfoInline(admin.StackedInline):
model = UserInfo
class UserAdmin(UserAdmin):
inlines = (UserInfoInline, )
admin.site.register(UserType)
admin.site.register(City)
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
这会在管理面板中显示我正在寻找的额外字段。但是,当我尝试添加新用户并选择其中一个userTypes(OneToOneField)时,我得到:
/ admin / auth / user / add /中的IntegrityError (1048,"列' userTypeID_id'不能为空")
现在我了解我的信号接收器' (据我所知,他们)缺少一些可以解决的问题,但我不确定是什么。
任何帮助都会受到赞赏,因为我是新手,试着向我解释,好像我一无所知(因为我基本上不会哈哈)
答案 0 :(得分:0)
您需要发布完整的追溯!
当您阅读Traceback时,您会看到此代码是跟踪帧的一部分:
UserInfo.objects.create(user=instance)
这个问题?它只是试图在没有userTypeID的情况下保存UserInfo!试试这个:
# make your default UserType object
default_user_type, created = UserType.objects.get_or_create(name='default')
UserInfo.objects.create(user=instance, UserTypeID=default_user_type)
另一种方法是只添加默认值,以便在创建对象时不想填写的列。