I'm struggling to achieve a simple queryset filter because i can't find how to get the current id of my form.
view.py
def update_record(request, pk):
if request.user.is_authenticated:
current_record = Record.objects.get(id=pk)
form = AddRecordForm(request.POST or None, instance=current_record)
if form.is_valid():
form.save()
messages.success(request, "Record Has Been Updated!")
return redirect('home')
return render(request, 'update_record.html', {'form':form})
else:
messages.success(request, "You Must Be Logged In...")
return redirect('home')
forms.py
class AddRecordForm(forms.ModelForm):
testrever = forms.ModelMultipleChoiceField(widget=forms.widgets.SelectMultiple, queryset=BDC.objects.filter(ref = ???current.id.of.Record.model???).values_list('model'))
class Meta:
model = Record
exclude = ("user",)
class BDCform(forms.ModelForm):
ref = forms.CharField(required=False, widget=forms.widgets.TextInput(attrs={"placeholder":"First Name", "class":"form-control"}), label="")
model = forms.CharField(required=False, widget=forms.widgets.TextInput(attrs={"placeholder":"Last Name", "class":"form-control"}), label="")
class Meta:
model = BDC
exclude = ("user",)
models.py
class Record(models.Model):
id = models.CharField(primary_key=True, max_length=50)
testrever = models.JSONField(max_length=500)
def __str__(self):
return (f"{self.first_name} {self.last_name}")
class BDC(models.Model):
ref = models.CharField(max_length=50)
model = models.CharField(max_length=50)
My problem is in this line in forms.py
:
queryset=BDC.objects.filter(ref = ???current.id.of.Record.model??? ).values_list('model')
How can i get the current ID of the Record form to compare it with "ref" of BDC form so i can populate the widget with the results ?
Thanks
this what i did to fix the probleme :
def __init__(self, *args, **kwargs):
self.storage_pk = kwargs.pop('pk')
super(AddRecordForm, self).__init__(*args, **kwargs)
self.fields['testrever'].queryset = BDC.objects.filter(ref=self.storage_pk).values_list('model', flat=True)
and modified
testrever = forms.ModelMultipleChoiceField(widget=forms.widgets.SelectMultiple, queryset=None)