Django admin inline table 不将值发布到一对一关系

Django admin inline table not posting values to one to one relationship

对于这个令人费解的问题,我深表歉意,但我是一名未经任何培训就被扔进 Django 框架的大学生,我正在尽我最大的努力在短时间内理解这一切。我真的很喜欢 Django,但就是想不出我遇到的一个问题。

因此,对于作业,我需要扩展默认管理员用户 table 以包含更多字段。这就是我所做的:

型号:

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)

这会在管理面板中显示额外的字段,这正是我要找的。但是,当我尝试添加一个新用户并且我 select 一个用户类型(OneToOneField)时,我得到:

IntegrityError at /admin/auth/user/add/ (1048, "Column 'userTypeID_id' cannot be null")

现在我明白我的 'Signal receivers'(据我所知)缺少一些东西来处理这个,但我不确定是什么。

任何帮助将不胜感激,因为我是新手,请尝试像我什么都不知道一样向我解释(因为我基本上不知道哈哈)

您需要 post 完整的回溯!

当您阅读 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)

另一种方法是将默认值添加到您在创建对象时不想填写的列。