在 Django 框架中注册时如何为用户分配默认选择值

How to assign a default choice value to a user when they sign up in django framework

我正在编写一个逻辑,当用户创建帐户时,我想自动为他们分配免费会员资格,我知道这应该在注册视图中完成,但我不知道为什么它不起作用预期的。我仍然必须手动转到我的管理页面并手动为新创建的用户分配一个值,这不是我真正想要的。

Models.py

class Membership(models.Model):
    MEMBERSHIP_CHOICES = (
        ('Enterprise', 'Enterprise'), # Note that they are all capitalize//
        ('Team', 'Team'),
        ('Student', 'Student'),
        ('Free', 'Free')
    )
    PERIOD_DURATION = (
        ('Days', 'Days'),
        ('Week', 'Week'),
        ('Months', 'Months'),
    )
    slug = models.SlugField(null=True, blank=True)
    membership_type = models.CharField(choices=MEMBERSHIP_CHOICES, default='Free', max_length=30)
    duration = models.PositiveIntegerField(default=7)
    duration_period = models.CharField(max_length=100, default='Day', choices=PERIOD_DURATION)
    price = models.DecimalField(max_digits=10, decimal_places=2, default=0.00)

    def __str__(self):
       return self.membership_type

#### User Membership
class UserMembership(models.Model):
    user = models.OneToOneField(User, related_name='user_membership', on_delete=models.CASCADE)
    membership = models.ForeignKey(Membership, related_name='user_membership', on_delete=models.SET_NULL, null=True)
    reference_code = models.CharField(max_length=100, default='', blank=True)

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

@receiver(post_save, sender=UserMembership)
def create_subscription(sender, instance, *args, **kwargs):
    if instance:
        Subscription.objects.create(user_membership=instance, expires_in=dt.now().date() + timedelta(days=instance.membership.duration))

views.py

def register(request):
    reviews = Review.objects.filter(status='published')
    info = Announcements.objects.all()
    categories = Category.objects.all()
    if request.method == "POST":
        form = UserRegisterForm(request.POST)
        if form.is_valid():
            form.save()
            username = form.cleaned_data.get('username')
            obj = request.user
            get_membership = Membership.objects.get(membership_type='Free')
            instance = UserMembership.objects.create(user=obj, membership=get_membership)
            messages.success(request, f'Account Successfully created for {username}! You can Login In Now')
            return redirect('userauths:login')
            
    elif request.user.is_authenticated:
        return redirect('elements:home')
    else:
        form = UserRegisterForm()
    context = {
        'reviews': reviews,
        'form': form,
        'info': info,
        'categories': categories
    }
    return render(request, 'userauths/register.html', context)

在模型中你需要特殊的 default="..." 属性