Django在注册新用户时创建新对象

2024-06-28 11:16:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个打赌应用程序/猜测应用程序。用户可以在所有NFL游戏上下注并猜测正确的结果。因此,我制作了4个模型(2个与我当前的问题相关):

class Customer(models.Model):
    name    = models.ForeignKey(User,on_delete=models.CASCADE)
    points   = models.IntegerField(null=True, default=0)


class Tipp(models.Model):
# model for one gameday (17 gamedays at all)
    user = models.ForeignKey(Customer, on_delete=models.CASCADE, null=True, blank=True)
    week = models.ForeignKey(Game, on_delete=models.CASCADE, null=True, blank=True)
    result_hometeam1     = models.IntegerField(null=True, blank=True)
    result_guestteam1     = models.IntegerField(null=True, blank=True)
    ...

因此,用户每周可以下注16场游戏。为此,我创建了一个表单并在模板中实现:

class Tipp_form(ModelForm):
    class Meta:
        model = Tipp
        fields = '__all__'

# views.py
def week(request, pk):
    game = Tipp.objects.get(id=pk)
    form = Tipp_form(initial={'user':request.user, 'week':game}, instance=game)

    if request.method == 'POST':
        form = Tipp_form(request.POST, instance=game)
        if form.is_valid():
            form.save()
    return render(request, 'main/week.html', {
        'game': game,
        'form': form,
     })

一切都很好,但现在如果一个新用户注册,我不想创造17个新的星期,每天16场比赛!有没有一种说法:如果新用户登录,在Tipp中创建17个新对象并设置user=newuser


Tags: 用户formgametrueonmodelsrequestdelete
1条回答
网友
1楼 · 发布于 2024-06-28 11:16:02

您可以为此使用信号,以便每次创建新用户时,也会为Tipp创建新对象,例如:

from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import Tipp

@receiver(post_save, sender=User)
def create_user_picks(sender, instance, created, **kwargs):
    if created:
        Tipp.objects.create(user=instance)

相关问题 更多 >