i have some issues with the following code.
I have an authentication system that works fine.
After user registers the account, django send a email with token for account confirmation.
it works fine.
now i want to add some code to save automatically free membership parameter when user click on activation link.
there is something of wrong in my code:
MEMBERSHIP_CHOICES = (('Premium', 'PREMIUM'),
('Free', 'FREE')
)
class Membership(models.Model):
slug = models.SlugField(null=True, blank=True)
# name = models.CharField(max_length=100)
description = models.TextField()
membership_type = models.CharField(choices=MEMBERSHIP_CHOICES, default='Free',max_length=30)
price = models.DecimalField(default=0.00, max_digits=5, decimal_places=2)
def __str__(self):
return self.membership_type
class UserMembership(models.Model):
user = models.OneToOneField(Customer,
related_name='user_membership',
on_delete=models.CASCADE)
membership = models.ForeignKey(Membership, related_name='user_membership',
on_delete=models.SET_NULL, null=True)
start_date = models.DateTimeField(auto_now_add=True)
end_date = models.DateTimeField(default=18000) # Calculate based on start_date + 30 days
def __str__(self):
return self.user.username
def account_activate(request, uidb64, token):
try:
uid = force_str(urlsafe_base64_decode(uidb64))
user = Customer.objects.get(pk=uid)
except (TypeError, ValueError, OverflowError, user.DoesNotExist):
user = None
if user is not None and account_activation_token.check_token(user, token):
user.is_active = True
user.save()
# Create a free membership
free_membership = Membership.objects.get(membership_type='Free')
# Convert the Membership object to string
# free_membership_str = str(free_membership)
print(free_membership)
# Create a new UserMembership
user_membership = UserMembership.objects.create(user=user, membership=free_membership)
# user_membership = UserMembership.objects.create(user=user, membership=free_membership.membership_type)
# user_membership = UserMembership.objects.create(user=user, membership='Free')
# user_membership = UserMembership.objects.create(user=user, membership=self.free_membership)
user_membership.save()
# # Creating a new UserSubscription
# user_subscription = Subscription.objects.create(user_membership=user_membership)
# # user_subscription = Subscription()
# # user_subscription.user_membership = user_membership
# user_subscription.save()
# # return user
login(request, user)
return redirect("homepage:homepage")
else:
return render(request, "account/registration/activation_invalid.html")
if i use: user_membership = UserMembership.objects.create(user=user, membership=free_membership)
the issue is: fromisoformat: argument must be str
or
if i use: user_membership = UserMembership.objects.create(user=user, membership='Free')
the issue is: Cannot assign "'Free'": "UserMembership.membership" must be a "Membership" instance.
can you help me? thanks