如何在下拉菜单中只列出活跃用户



我想在下拉列表中列出所有活跃用户。但是所有用户都在下拉列表中列出我该怎么做呢?

模板

<form method="post">
{% csrf_token %}
{{ form|crispy }}
<input type="hidden" name="customer_id" value="{{ customer.id }}">
<button type="submit" class="btn btn-primary btn-sm">Assign</button>
</form>

class AssignForm(forms.ModelForm):
class Meta:
model = Customer
fields = ('user',)

form = AssignForm(request.POST or None)
if request.POST:
customer_id = request.POST.get('customer_id', None)
customer = Customer.objects.get(id=customer_id)
user = UserProfile.objects.get(id=request.POST.get('user', None))
customer.user = user
customer.save()
# form.save()
return redirect('user:customer_list')

class UserProfile(AbstractUser, UserMixin):
company = models.ForeignKey(CompanyProfile, on_delete=models.CASCADE, null=True, unique=False)
username = models.CharField(max_length=500, unique=True)
first_name = models.CharField(max_length=200)
...

您可以使用以下命令过滤assignForm中的user字段:

class AssignForm(forms.ModelForm):
user = forms.ModelChoiceField(
queryset=UserProfile.objects.filter(is_active=True)
)
class Meta:
model = Customer
fields = ('user',)

您还可以在模型级别使用:

过滤它:
class Customer(models.Model):
user = models.OneToOneField(
'UserProfile',
limit_choices_to={'is_active': True}
)

在这种情况下,您不需要在ModelForm(s)中指定此。

我强烈建议您在POST请求中使用表单来创建实例,因此:

customer_id = request.POST.get('customer_id')
if customer_id:
instance = get_object_or_404(Customer, id=customer_id)
else:
instance = None
if request.method == 'POST':
form = AssignForm(request.POST, instance=instance)
if form.is_valid():
form.save()
return redirect('user:customer_list')
# …

您可以创建一个新的模型ActiveUser,并对其施加一个过滤器(参见https://www.django-rest-framework.org/api-guide/filtering/),具体取决于"活动"的内容。在你的情况下意味着。

最新更新