【发布时间】:2022-01-20 05:17:27
【问题描述】:
我正在做一个小项目来给推销员打分。我有地区,每个地区都有销售员。因此,如果选择了区域“blahblah”,则表单应显示与该区域相关的销售人员选择。我通过 stackoverflow 找到了一些答案,但它仍然显示所有销售人员,无论他们所在的地区。
我的模型是这样的:
class Region(models.Model):
name = models.CharField(max_length=50)
slug = models.SlugField(max_length=50, unique=True)
def __str__(self):
return self.name
class Salesman(models.Model):
region = models.ForeignKey(Region,
related_name='region',
on_delete=models.CASCADE)
name = models.CharField(max_length=40)
surname = models.CharField(max_length=40)
def __str__(self):
return self.name
class Rating(models.Model):
RATING_CHOICES = [(i, str(i)) for i in range(1,6)]
salesman = models.ForeignKey(Salesman,
related_name='salesman',
on_delete=models.CASCADE)
phone = models.CharField(max_length=15, blank=True)
rating = models.IntegerField(choices=RATING_CHOICES, blank=False)
sent_time = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.phone
我发现我的 forms.py 修改了 __init__ 方法:
class RateAddForm(forms.ModelForm):
class Meta:
model = Rating
def __init__(self, region_id=None, **kwargs):
super(RateAddForm, self).__init__(**kwargs)
if region_id:
self.fields['salesman'].queryset = Salesman.objects.filter(region=region_id)
还有我的views.py是这样的:
def report_add(request, region_id):
if request.method == 'POST':
print(region_id)
form = RateAddForm(request.POST, region_id=region_id)
if form.is_valid():
message = "Thanks!"
form.save()
return HttpResponse(message)
else:
print("Something went wrong!")
form = RateAddForm()
else:
form = RateAddForm(request.POST)
return render(request,
'account/report.html',
{'form': form})
即使我选择了一个地区,它仍然会显示我数据库中的所有销售人员。如何解决这个表格应该只显示选定区域的销售人员的问题。提前致谢!
【问题讨论】:
-
我不知道,但这看起来好像查询集被超类
__init__method 扩展为一个选择实例?