Почему мой фильтр queryset для создания счета за электроэнергию не работает?
Я работал над проектом, в котором пользователь создает несколько членов (модель) и их счета за электричество (это тоже модель), но когда я применяю queryset к ElectricityForm, он выдает ошибку.
KeyError at /bills/electricity/create/
my members/models.py
from django.db import models
import uuid
from django.contrib.auth import get_user_model
from phonenumber_field.modelfields import PhoneNumberField
class Member(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
created_by = models.ForeignKey(get_user_model(), on_delete=models.CASCADE,related_name="members")
name = models.CharField(max_length=250)
email_address = models.EmailField(max_length=252, null=False, blank=False, unique=True)
phone_no = PhoneNumberField()
def __str__(self):
return str(self.id)
my electricity_bills/models.py
from django.db import models
from members.models import Member
import uuid
import datetime
class ElectricityBill(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
member = models.ForeignKey(Member, on_delete=models.CASCADE, related_name="electricity_bills" )
id_member = models.CharField(max_length=40)
k_no = models.CharField(max_length=40)
last_date = models.DateField()
state = models.CharField(max_length=50, null=False, blank=False , choices=state_choices, default="Rajasthan")
month = models.CharField(choices=months, default="January", max_length=10)
year = models.CharField(choices=years, default="2022", max_length=4)
amount = models.PositiveIntegerField()
email_send = models.BooleanField(default=True)
is_email_sent = models.BooleanField(default=False)
def __str__(self):
return str(self.member)
my electricity_bill/views.py
class ElectricityBillCreateView(LoginRequiredMixin, CreateView):
model = ElectricityBill
template_name = 'bills/electricity/bill_create.html'
form_class = ElectricityForm
success_url = reverse_lazy('ebills_list')
my electricity_bills/forms.py
from django import forms
from .models import ElectricityBill
from members.models import Member
from django.contrib.auth import get_user_model
class ElectricityForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request')
super(ElectricityForm, self).__init__(*args, **kwargs)
self.fields['member'].queryset = Member.objects.filter(
created_by=self.request.user)
member = forms.ModelChoiceField(queryset=Member.objects.all())
k_no = forms.CharField()
id_member = forms.CharField()
class Meta:
model = ElectricityBill
fields = ("member", "k_no", "id_member", "state", "last_date", "month", "year", "amount", "email_send")
Если вы знаете, как решить эту проблему, пожалуйста, скажите мне, я устал от этого
Override get_form_kwargs в вашем подклассе CreateView для передачи дополнительных аргументов ключевых слов в метод __init__ вашей формы
Передать текущий request:
class ElectricityBillCreateView(LoginRequiredMixin, CreateView):
...
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
kwargs['request'] = self.request
return kwargs