创建用户后,如何将用户与 django 模型联系起来?

Joh*_*eng 1 python django django-models django-users

我是 Django 的新手,我的问题是如何在用户注册后立即将 DjangoUserClimber我创建的模型链接起来?到目前为止,我可以User使用 Django 的内置用户注册表来注册一个新用户。但是当我进入我的管理页面时,我看到我必须Climber手动创建一个新页面并选择User我想要链接到的页面。先感谢您!

class Climber(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    grades = [('v'+str(i),'v'+str(i))for i in range(0,13)]
    highest_grade = models.CharField(max_length=3, choices=grades, default='v0')
    team = models.ForeignKey(Team, null=True, on_delete=models.SET_NULL)
    climbs_completed = models.ManyToManyField(Climb, blank=True)

    def __str__(self):
        return self.user.username

    # for each climbs_completed, sum up the points
    def total_score(self):
        pass
Run Code Online (Sandbox Code Playgroud)

wfe*_*ehr 5

你可以用信号来做到这一点。

例子:

from django.contrib.auth import get_user_model
from django.db.models.signals import post_save
from django.dispatch import receiver
from myapp.models import Climber

User = get_user_model()


@receiver(post_save, sender=User)
def my_handler(sender, instance, created, **kwargs):
    if created:
        Climber.objects.create(user=instance, ...)
Run Code Online (Sandbox Code Playgroud)

另一种方法是覆盖-model的clean()orsave()方法User,考虑到您自己有自定义用户模型。