簡體   English   中英

創建用戶后,如何將用戶與 django model 鏈接?

[英]How do I link a User with a django model as soon as the User is created?

我是 Django 的新手,我的問題是如何將 Django User與我在用戶注冊后立即創建的Climber model 鏈接? 到目前為止,我可以使用 Django 的內置用戶注冊表單注冊一個新User 但是當我 go 進入我的管理頁面時,我看到我必須手動創建一個新的Climber和 select 我希望它鏈接到的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

你可以用信號做到這一點。

例子:

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, ...)

另一種方法是覆蓋User模型的clean()save()方法,考慮到您自己有一個自定義用戶 model。

你應該使用信號

在模型 Climber 中創建 function

@receiver(post_save, sender=User)
def link_climber(sender, instance, created, **kwargs):
    """ If new user is created, create climber for him """
    if created:
        Climber.objects.create(user=instance)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM