В Django: Даже после использования "queryset = objects.none()" в forms.py, я все еще вижу выпадающее меню со всеми опциями

При отображении формы в браузере выпадающее меню CPA_Clients должно быть пустым, так как я использовал "self.fields['name'].queryset = CPA_Client.objects.none()" (Так как я буду делать цепочку выпадающих меню) в файле forms.py, но я все еще вижу все содержимое CPA_Clients в выпадающем меню. Где я ошибся?

forms.py

from django import forms
from .models import Task, CPA_Client

class TaskDetails(forms.Form):
    class Meta:
        model = Task
        fields = '__all__'

    def __init__(self, *args, **kwargs):
        super(TaskDetails, self).__init__(*args, **kwargs)
        self.fields['name'].queryset = CPA_Client.objects.none()

models.py

from django.db import models
from django.contrib.auth.models import User
from datetime import datetime
from uuid import uuid4
from django.urls import reverse
import os

#Create your models here.
class TaskType(models.Model):
    name = models.CharField(max_length=40)
    def __str__(self):
        return self.name
    class Meta:
        verbose_name_plural = 'Task Type'

class CPAsList(models.Model):
    name = models.CharField(max_length=100)
    def __str__(self):
        return self.name
    class Meta:
        verbose_name_plural = 'CPAs'

class CPA_Client(models.Model): 
    CPA = models.ForeignKey(CPAsList,on_delete=models.CASCADE, null=True)
    name = models.CharField(max_length=100)
    def __str__(self):
        return self.name
    class Meta:
        verbose_name_plural = 'CPA\'s Clients'

def get_random_filename(instance, filename):
    now = datetime.now()
    path = now.strftime("%Y/%B/%d")
    instance.filename = filename
    ext = filename.split('.')[-1]
    filename = "%s.%s" % (str(uuid4()), ext)
    return os.path.join(path, filename)

TASK_STAGE = [
    ('NE','New'),
    ('OG','Ongoing'),
    ('CM','Completed')
]

PRIORITY = [
    ('HI','High'),
    ('ME','Medium'),
    ('LO','Low')
]

class Document(models.Model):
    file = models.FileField(upload_to=get_random_filename, default="")
    filename = models.CharField(max_length=128, editable=False, default="")
    def __str__(self):
        return self.filename

class Task(models.Model):   
    Stage = models.CharField(max_length=100, choices=TASK_STAGE, default='NE')
    Subject_Line = models.CharField(max_length=255, default="", editable=True,)
    Task_Type = models.ForeignKey(TaskType, on_delete=models.SET_NULL, null=True)
    CPA = models.ForeignKey(CPAsList, on_delete=models.SET_NULL, null=True)
    Client_of_CPA = models.ForeignKey(CPA_Client, on_delete=models.SET_NULL, null=True)
    Priority = models.CharField(max_length=100, choices = PRIORITY, default='ME')
    Assign_to = models.ForeignKey(User, on_delete=models.CASCADE, related_name='assignedUser')
    Date_Added = models.DateTimeField(editable=True, null=True, default=datetime.now)
    Additional_Note = models.TextField(blank=True, null=True)
    Author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='assigneeUser', null=True, editable=False)

    def __str__(self):
        return self.Subject_Line

    def get_absolute_url(self):
        return reverse('task-detail', kwargs={'pk': self.pk})


class TimeStamps(models.Model):
    Task_ID = models.ForeignKey(User, on_delete=models.CASCADE)
    TimeStamp = models.IntegerField(default=0)

views.py

from django.shortcuts import render, redirect, get_object_or_404
from django.http import JsonResponse, HttpResponse
from .models import Task
from django.views.generic import ListView, DetailView, CreateView, UpdateView, DeleteView
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
from .models import Task, CPAsList, CPA_Client, TaskType, Document
from .forms import TaskDetails
from django.contrib.auth.decorators import login_required

# Create your views here.
@login_required
def home(request):
    context = {
        'tasks': Task.objects.all()
    }
    return render(request, 'crm/home.html', context)

class TaskListView(ListView):
    model = Task
    template_name = 'crm/home.html'
    context_object_name = 'tasks'
    ordering = ['-Date_Added']

class TaskDetailView(DetailView):
    model = Task

class TaskDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
    model = Task
    success_url = '/'
    def test_func(self):
        task = self.get_object()
        if self.request.user == task.Author:
            return True
        return False

class TaskCreateView(LoginRequiredMixin, CreateView):
    model = Task
    fields = '__all__'
    success_url = '/'

    def model_form_upload(self, form):
        if request.method == 'POST':
            form = TaskDetails(request.POST, request.FILES)
            if form.is_valid():
                form.instance.Author = self.request.user
                return super().model_form_upload(form)
            else:
                form = TaskDetails()
                return render(request, 'crm-home', {'form': form})

class TaskUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
    model = Task
    fields = '__all__'
    #success_url = '/'

    def model_form_upload(self, form):
        if request.method == 'POST':
            form = TaskDetails(request.POST, request.FILES)
            if form.is_valid():
                form.Author = self.request.user
                return super().model_form_upload(form)
            else:
                form = TaskDetails()
                return render(request, 'crm-home', {'form': form})

    def test_func(self):
        task = self.get_object()
        if self.request.user == task.Author:
            return True
        return False

def contact(request):
    return render(request, 'crm/contact.html')


def update_counter(request):
    if request.method == 'POST':
        counterValue = request.POST['counter']
        startTime = request.POST['timestamp']
        print(counterValue)
        print(startTime)
        message = 'update successful'
    return HttpResponse(message)

#AJAX
def load_cities(request):
    country_id = request.GET.get('country_id')
    cities = City.objects.filter(country_id=country_id).all()
    return render(request, 'persons/city_dropdown_list_options.html', {'cities': cities})
    # return JsonResponse(list(cities.values('id', 'name')), safe=False)

Ваша Task модель не имеет name поля. Поле Client_of_CPA является ForeignKey к модели CPA_Client:

class TaskDetails(forms.Form):
    
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['Client_of_CPA'].queryset = CPA_Client.objects.none()    

    class Meta:
        model = Task
        fields = '__all__'

Ваши TaskCreateView и TaskUpdateView делают не использование вашей формы, однако, вам необходимо указать это с помощью:

class TaskCreateView(LoginRequiredMixin, CreateView):
    model = Task
    form_class = TaskDetails
    success_url = '/'
    template_name = 'crm-home'

    def form_valid(self, form):
        form.instance.Author = self.request.user
        return super().form_valid(form)


class TaskUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
    model = Task
    form_class = TaskDetails
    success_url = '/'
    template_name = 'crm-home'

    def form_valid(self, form):
        form.instance.Author = self.request.user
        return super().form_valid(form)

    def test_func(self):
        task = self.get_object()
        return self.request.user == task.Author
Вернуться на верх