django表单中基于登录用户的筛选器下拉选项
我有一个django表单来创建一个名为django表单中基于登录用户的筛选器下拉选项,django,django-forms,Django,Django Forms,我有一个django表单来创建一个名为Ticket的类的新实例(记录)。用户可以来自不同的客户端,因此我需要将下拉列表中显示的选项基本上限制为登录用户的客户端client是我在admin.py中定义的类的一个属性,它定义了用户的客户端名称。我知道我走的是正确的道路,但我很难做到这一点,因为我需要提取登录的用户的客户机,然后在初始化表单时使用它过滤字段(例如业务),是否需要任何帮助?请考虑我有多个应该被过滤的字段,所以如果有一个方法对所有字段进行一次,那就太好了: 型号.py class Busi
Ticket
的类的新实例(记录)。用户可以来自不同的客户端
,因此我需要将下拉列表中显示的选项基本上限制为登录用户的客户端client
是我在admin.py
中定义的类的一个属性,它定义了用户的客户端
名称。我知道我走的是正确的道路,但我很难做到这一点,因为我需要提取登录的用户的客户机,然后在初始化表单时使用它过滤字段(例如业务
),是否需要任何帮助?请考虑我有多个应该被过滤的字段,所以如果有一个方法对所有字段进行一次,那就太好了:
型号.py
class Business(models.Model):
client=models.ForeignKey('Client',on_delete=models.CASCADE, limit_choices_to={'is_active':True},)
name=models.CharField(max_length=30,blank=False, unique=True,)
description = models.CharField(max_length=50, blank=True, )
is_active=models.BooleanField(default=True,)
class Ticket(MMRequestAttributes):
no=models.CharField('Ticket Number',max_length=50,default=uuid.uuid4,null=False, blank=False, editable=False, unique=True)
subject=models.CharField('Subject',max_length=100,null=False, blank=False)
business=models.ForeignKey('Business', on_delete=models.CASCADE,limit_choices_to={'is_active':True},)
class Meta:
permissions=(('view_ticket','Can see tickets'),)
def new_ticket(request):
form=NewTicket(request.user)
return render(request,'mmrapp/new_ticket.html',{'form':form})
class UserExtend(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, blank=False,null=False,)
client=models.ForeignKey('Client', on_delete=models.CASCADE,limit_choices_to={'is_active': True},)
class Meta:
verbose_name_plural='User Extends'
from django import forms
from .models import Ticket
from .admin import UserExtend
class NewTicket(forms.ModelForm):
def __init__(self,user):
self.business.queryset=business.objects.filter(client.id=userextend.client_id)
class Meta:
model=Ticket
fields = ('subject','business')
视图.py
class Business(models.Model):
client=models.ForeignKey('Client',on_delete=models.CASCADE, limit_choices_to={'is_active':True},)
name=models.CharField(max_length=30,blank=False, unique=True,)
description = models.CharField(max_length=50, blank=True, )
is_active=models.BooleanField(default=True,)
class Ticket(MMRequestAttributes):
no=models.CharField('Ticket Number',max_length=50,default=uuid.uuid4,null=False, blank=False, editable=False, unique=True)
subject=models.CharField('Subject',max_length=100,null=False, blank=False)
business=models.ForeignKey('Business', on_delete=models.CASCADE,limit_choices_to={'is_active':True},)
class Meta:
permissions=(('view_ticket','Can see tickets'),)
def new_ticket(request):
form=NewTicket(request.user)
return render(request,'mmrapp/new_ticket.html',{'form':form})
class UserExtend(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, blank=False,null=False,)
client=models.ForeignKey('Client', on_delete=models.CASCADE,limit_choices_to={'is_active': True},)
class Meta:
verbose_name_plural='User Extends'
from django import forms
from .models import Ticket
from .admin import UserExtend
class NewTicket(forms.ModelForm):
def __init__(self,user):
self.business.queryset=business.objects.filter(client.id=userextend.client_id)
class Meta:
model=Ticket
fields = ('subject','business')
admin.py
class Business(models.Model):
client=models.ForeignKey('Client',on_delete=models.CASCADE, limit_choices_to={'is_active':True},)
name=models.CharField(max_length=30,blank=False, unique=True,)
description = models.CharField(max_length=50, blank=True, )
is_active=models.BooleanField(default=True,)
class Ticket(MMRequestAttributes):
no=models.CharField('Ticket Number',max_length=50,default=uuid.uuid4,null=False, blank=False, editable=False, unique=True)
subject=models.CharField('Subject',max_length=100,null=False, blank=False)
business=models.ForeignKey('Business', on_delete=models.CASCADE,limit_choices_to={'is_active':True},)
class Meta:
permissions=(('view_ticket','Can see tickets'),)
def new_ticket(request):
form=NewTicket(request.user)
return render(request,'mmrapp/new_ticket.html',{'form':form})
class UserExtend(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, blank=False,null=False,)
client=models.ForeignKey('Client', on_delete=models.CASCADE,limit_choices_to={'is_active': True},)
class Meta:
verbose_name_plural='User Extends'
from django import forms
from .models import Ticket
from .admin import UserExtend
class NewTicket(forms.ModelForm):
def __init__(self,user):
self.business.queryset=business.objects.filter(client.id=userextend.client_id)
class Meta:
model=Ticket
fields = ('subject','business')
forms.py
class Business(models.Model):
client=models.ForeignKey('Client',on_delete=models.CASCADE, limit_choices_to={'is_active':True},)
name=models.CharField(max_length=30,blank=False, unique=True,)
description = models.CharField(max_length=50, blank=True, )
is_active=models.BooleanField(default=True,)
class Ticket(MMRequestAttributes):
no=models.CharField('Ticket Number',max_length=50,default=uuid.uuid4,null=False, blank=False, editable=False, unique=True)
subject=models.CharField('Subject',max_length=100,null=False, blank=False)
business=models.ForeignKey('Business', on_delete=models.CASCADE,limit_choices_to={'is_active':True},)
class Meta:
permissions=(('view_ticket','Can see tickets'),)
def new_ticket(request):
form=NewTicket(request.user)
return render(request,'mmrapp/new_ticket.html',{'form':form})
class UserExtend(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, blank=False,null=False,)
client=models.ForeignKey('Client', on_delete=models.CASCADE,limit_choices_to={'is_active': True},)
class Meta:
verbose_name_plural='User Extends'
from django import forms
from .models import Ticket
from .admin import UserExtend
class NewTicket(forms.ModelForm):
def __init__(self,user):
self.business.queryset=business.objects.filter(client.id=userextend.client_id)
class Meta:
model=Ticket
fields = ('subject','business')
newticket.html
{% extends 'mmrapp/__l_single_column.html' %}
{% load static %}
{% block main_col %}
<h1>New Ticket</h1>
<form method="POST" class="new-ticket">{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="save btn btn-default">Submit</button>
</form>
{% endblock main_col %}
{%extends'mmrapp/\uu l\u single\u column.html%}
{%load static%}
{%block main_col%}
新票
{%csrf_令牌%}
{{form.as_p}}
提交
{%endblock main_col%}
如果您的操作方式正确,只需将\uuuu init\uuuu
更改为此即可
class NewTicket(forms.ModelForm):
def __init__(self,user, *args, **kwargs):
super(NewTicket, self).__init__(*args, **kwargs)
try:
client_id = UserExtend.objects.values_list('client_id', flat=True).get(user=user)
self.fields['business'].queryset=Business.objects.filter(client__id=client_id)
except UserExtend.DoesNotExist:
### there is not userextend corresponding to this user, do what you want
pass
class Meta:
model=Ticket
fields = ('subject','business')
另外,别忘了将request.user传递到视图中的表单。它没有抛出错误并呈现表单,但没有空格,它只是表单的标题,提交按钮业务
是从另一个类继承的,它实际上没有在票证下定义,我不认为这会导致问题?呈现的表单没有同时带来主题
和业务
?或者仅仅是业务
?它没有带来任何问题哦,对不起,我只是忘了给超级init打电话