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
没有评论:
发表评论