In my CRM, once the user has signed up it also creates them as agents.
My problem is this, in the signup page, the users input their name and details, however once the agent has been created, the agent objects doesn't inherit from the user account.
here's my MODEL.PY:
from django.db import models from django.db.models.signals import post_save from django.contrib.auth.models import AbstractUser class User(AbstractUser): is_techtanium = models.BooleanField(default=False) is_organizer = models.BooleanField(default=False) is_agent = models.BooleanField(default=True) class UserProfile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) def __str__(self): return self.user.username class Client(models.Model): first_name = models.CharField(max_length=30) middle_name = models.CharField(max_length=20) last_name = models.CharField(max_length=20) mobile_number = models.CharField(max_length=12) email = models.EmailField() organization = models.ForeignKey(UserProfile, null=True, blank=True, on_delete=models.CASCADE) agent = models.ForeignKey("Agent", related_name="clients", null=True, blank=True, on_delete=models.SET_NULL) category = models.ForeignKey("Category", related_name="clients", null=True, blank=True, default=4, on_delete=models.SET_NULL) company_name = models.CharField(max_length=50 , default=None) street_address = models.CharField(max_length=50 , default=None) baranggay = models.CharField(max_length=50 , default=None) city = models.CharField(max_length=50 , default=None) region = models.CharField(max_length=50 , default=None) date_added = models.DateTimeField(auto_now_add=True) phoned = models.BooleanField(default=False) special_files = models.FileField(blank=True , null=True) def __str__(self): return f"{self.first_name} {self.last_name}" class Agent(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) organization = models.ForeignKey(UserProfile, null=True, blank=True, on_delete=models.CASCADE) first_name = models.CharField(max_length=30, null=True, blank=True) middle_name = models.CharField(max_length=20, null=True, blank=True) last_name = models.CharField(max_length=20, null=True, blank=True) agent_type = models.CharField(max_length=20, null=True, blank=True) email = models.EmailField(null=True, blank=True) mobile_number = models.CharField(max_length=12, null=True, blank=True) def __str__(self): return f"{self.first_name} {self.last_name}" class Category(models.Model): name = models.CharField(max_length=30, default='New') # New, Tapped, Active, Closed def __str__(self): return self.name def post_user_created_signal(sender, instance, created, **kwargs): if created: UserProfile.objects.create(user=instance) Agent.objects.create(user=instance) post_save.connect(post_user_created_signal, sender=User) Here is my FORMS.PY
from django import forms from django.contrib.auth.forms import UserCreationForm, UsernameField from .models import Client, User, Agent class client_ModelForm(forms.ModelForm): class Meta: model = Client fields = ( 'first_name', 'middle_name', 'last_name', 'mobile_number', 'email', 'company_name', 'street_address', 'baranggay', 'city', 'region', ) class client_ModelForm_Organizer(forms.ModelForm): class Meta: model = Client fields = ( 'first_name', 'middle_name', 'last_name', 'mobile_number', 'email', 'company_name', 'street_address', 'baranggay', 'city', 'region', 'agent' ) class Client_Form(forms.Form): first_name = forms.CharField(max_length=25) middle_name = forms.CharField(max_length=25) last_name = forms.CharField(max_length=25) mobile_number = forms.CharField(max_length=12) company_name = forms.CharField(max_length=50) office_address = forms.CharField(max_length=50) class CustomUserCreationForm(UserCreationForm): class Meta: model = User fields = ("username",) field_classes = {'username': UsernameField} class CustomUserCreationForm(UserCreationForm, forms.ModelForm): class Meta: model = User fields = ( 'first_name', 'last_name', 'email', 'username', ) class AssignAgentForm(forms.Form): agent = forms.ModelChoiceField(queryset=Agent.objects.none()) def __init__(self, *args, **kwargs): request = kwargs.pop("request") agents = Agent.objects.filter(organization=request.user.userprofile) super(AssignAgentForm, self).__init__(*args, **kwargs) self.fields["agent"].queryset = agents class ClientCategoryUpdateForm(forms.ModelForm): class Meta: model = Client fields = ( 'category', ) And my VIEWS.PY
from django.core.mail import send_mail from django.shortcuts import render, redirect, reverse from django.contrib.auth.mixins import LoginRequiredMixin from django.http import HttpResponse from django.views import generic from agents.mixins import OrganizerAndLoginRequiredMixin from .models import Client, Agent, Category from .forms import Client_Form, client_ModelForm, client_ModelForm_Organizer, CustomUserCreationForm, AssignAgentForm, ClientCategoryUpdateForm from agents.views import AgentCreateView # CRUD+L - Create, Retrieve, Update, Delete = List class SignupView(generic.CreateView): template_name = "registration/signup.html" form_class = CustomUserCreationForm def get_success_url(self): return reverse("login") # class SignupView(generic.CreateView): # template_name = "registration/signup.html" # form_class = CustomUserCreationForm # def get_success_url(self): # return reverse("login") # def form_valid(self, form): # user = form.save(commit=False) # user.is_agent = True # user.is_organizer = False # user.save() # Agent.objects.create( # user=user, # organization=self.request.user.userprofile # ) # send_mail( # subject="You are invited to be an agent.", # message="You were added as an agent on TechtaniumCRM. Please come login to start your journey with Techtanium Enterprise.", # from_email="admin@test.com", # recipient_list=[user.email] # ) # return super(AgentCreateView, self).form_valid(form) class LandingPageView(generic.TemplateView): template_name = "landing.html" def landing_page(request): return render(request, "landing.html") class ClientListView(LoginRequiredMixin, generic.ListView): template_name = "clients/client_list.html" context_object_name = "clients" def get_queryset(self): user = self.request.user if user.is_techtanium: queryset = Client.objects.all() #initial queryset of clients for the entire organization elif user.is_organizer: queryset = Client.objects.filter(organization=user.userprofile, agent__isnull=False) else: queryset = Client.objects.filter(organization=user.agent.organization, agent__isnull=False) # filter for the agent that is logged in queryset = queryset.filter(agent__user=user) return queryset def get_context_data(self, **kwargs): context = super(ClientListView, self).get_context_data(**kwargs) user = self.request.user if user.is_techtanium: queryset = Client.objects.filter( agent__isnull=True, ) context.update({ "unassigned_clients":queryset }) elif user.is_organizer: queryset = Client.objects.filter( organization=user.userprofile, agent__isnull=True ) context.update({ "unassigned_clients":queryset }) return context def client_list(request): clients = Client.objects.all() context = { "clients": clients } return render(request, "clients/client_list.html", context) class ClientDetailView(LoginRequiredMixin, generic.DetailView): template_name = "clients/client_detail.html" queryset = Client.objects.all() context_object_name = "client" def get_queryset(self): user=self.request.user #initial queryset of clients for the entire organization if user.is_organizer: queryset = Client.objects.filter(organization=user.userprofile) else: queryset = Client.objects.filter(organization=user.agent.organization) # filter for the agent that is logged in queryset = queryset.filter(agent__user=user) return queryset def client_detail(request, pk): client = Client.objects.get(id=pk) context = { "client": client } return render(request, "clients/client_detail.html", context) class ClientCreateView(LoginRequiredMixin, generic.CreateView): template_name = "clients/client_create.html" form_class = client_ModelForm def get_success_url(self): return reverse("clients:client-list") def form_valid(self, form): client = form.save(commit=False) client.organization = self.request.user.agent.organization client.agent = self.request.user.agent client.save() send_mail( subject=" A new client has been created", message="Go to the site to see the new client", from_email="test@test.com", recipient_list=["test2@test.com"] ) return super(ClientCreateView, self).form_valid(form) class OrganizerClientCreateView(OrganizerAndLoginRequiredMixin, generic.CreateView): template_name = "clients/organizer_client_create.html" form_class = client_ModelForm_Organizer def get_success_url(self): return reverse("clients:client-list") def form_valid(self, form): client = form.save(commit=False) client.organization = self.request.user.userprofile client.save() send_mail( subject=" A new client has been created", message="Go to the site to see the new client", from_email="test@test.com", recipient_list=["test2@test.com"] ) return super(OrganizerClientCreateView, self).form_valid(form) def client_create(request): form = client_ModelForm() if request.method == "POST": print('Receiving a post request') form = client_ModelForm(request.POST) if form.is_valid(): form.save() print('A new client has been added') return redirect("/clients") context = { "form": form } return render(request, "clients/client_create.html", context) class ClientUpdateView(OrganizerAndLoginRequiredMixin, generic.UpdateView): template_name = "clients/client_update.html" form_class = client_ModelForm def get_queryset(self): user=self.request.user #initial queryset of clients for the entire organization return Client.objects.filter(organization=user.userprofile) def get_success_url(self): return reverse("clients:client-list") def client_update(request, pk): client = Client.objects.get(id=pk) form = client_ModelForm(instance=client) if request.method == "POST": form = client_ModelForm(request.POST, instance=client) if form.is_valid(): form.save() return redirect("/clients") context = { "form": form, "client": client } return render(request, "clients/client_update.html", context) class ClientDeleteView(OrganizerAndLoginRequiredMixin, generic.DeleteView): template_name = "clients/client_delete.html" def get_queryset(self): user=self.request.user #initial queryset of clients for the entire organization return Client.objects.filter(organization=user.userprofile) def get_success_url(self): return reverse("clients:client-list") def client_delete(request, pk): client = Client.objects.get(id=pk) client.delete() return redirect("/clients") class AssignAgentView(LoginRequiredMixin, generic.FormView): template_name = "clients/assign_agent.html" form_class = AssignAgentForm def get_form_kwargs(self, **kwargs): kwargs = super(AssignAgentView, self).get_form_kwargs(**kwargs) kwargs.update({ "request": self.request }) return kwargs def get_success_url(self): return reverse("clients:client-list") def form_valid(self, form): agent = form.cleaned_data["agent"] client = Client.objects.get(id=self.kwargs["pk"]) client.agent = agent client.save() return super(AssignAgentView, self).form_valid(form) class CategoryListView(LoginRequiredMixin, generic.ListView): template_name = "clients/category_list.html" context_object_name = "category_list" def get_context_data(self, **kwargs): context = super(CategoryListView, self).get_context_data(**kwargs) user = self.request.user if user.is_organizer: queryset = Client.objects.filter(organization=user.userprofile) else: queryset = Client.objects.filter(organization=user.agent.organization) context.update({ "unassigned_client_count": queryset.filter(category__isnull=True).count() }) return context def get_queryset(self): user = self.request.user #initial queryset of clients for the entire organization if user.is_organizer: queryset = Category.objects.filter(organization=user.userprofile) else: queryset = Category.objects.filter(organization=user.agent.organization) return queryset class CategoryDetailView(LoginRequiredMixin, generic.DetailView): template_name = "clients/category_detail.html" context_object_name = "category" def get_queryset(self): user = self.request.user #initial queryset of clients for the entire organization if user.is_organizer: queryset = Category.objects.filter(organization=user.userprofile) else: queryset = Category.objects.filter(organization=user.agent.organization) return queryset class ClientCategoryUpdateView(LoginRequiredMixin, generic.UpdateView): template_name = "clients/client_category_update.html" form_class = ClientCategoryUpdateForm def get_queryset(self): user=self.request.user #initial queryset of clients for the entire organization if user.is_organizer: queryset = Client.objects.filter(organization=user.userprofile) else: queryset = Client.objects.filter(organization=user.agent.organization) # filter for the agent that is logged in queryset = queryset.filter(agent__user=user) return queryset def get_success_url(self): return reverse("clients:client-detail", kwargs={"pk": self.get_object().id}) Thank you in advance!!
https://stackoverflow.com/questions/67428472/user-object-to-agent-object-in-django May 07, 2021 at 11:01AM
没有评论:
发表评论