Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django表单中基于登录用户的筛选器下拉选项_Django_Django Forms - Fatal编程技术网

django表单中基于登录用户的筛选器下拉选项

django表单中基于登录用户的筛选器下拉选项,django,django-forms,Django,Django Forms,我有一个django表单来创建一个名为Ticket的类的新实例(记录)。用户可以来自不同的客户端,因此我需要将下拉列表中显示的选项基本上限制为登录用户的客户端client是我在admin.py中定义的类的一个属性,它定义了用户的客户端名称。我知道我走的是正确的道路,但我很难做到这一点,因为我需要提取登录的用户的客户机,然后在初始化表单时使用它过滤字段(例如业务),是否需要任何帮助?请考虑我有多个应该被过滤的字段,所以如果有一个方法对所有字段进行一次,那就太好了: 型号.py class Busi

我有一个django表单来创建一个名为
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打电话