【问题标题】:Django : Dropdown menu to show only unconfigured valuesDjango:下拉菜单仅显示未配置的值
【发布时间】:2020-08-07 22:15:01
【问题描述】:

我已经创建了两个模型 -

class DID_Definition_Model(models.Model):   # DID to Region-Carrier Mapping
    region_carrier = models.ForeignKey(Telco_Carrier_Mapper_Model, on_delete=models.CASCADE)
    did_number= models.CharField(max_length=32, validators=[alphanumeric], primary_key=True)
    did_cost= models.DecimalField(max_digits=10, decimal_places=2)
    created_on_date = models.DateTimeField(default=timezone.now)

class DID_Number_Assignment_Model(models.Model):       #DID Number Assignment
    did_selector = models.ForeignKey(DID_Definition_Model, on_delete=models.CASCADE, primary_key=True)
    subscriber_department=models.CharField(max_length=200)
    usage_assignment=models.ForeignKey(Usage_Assignment_Model, on_delete=models.CASCADE)
    employee_email=models.EmailField()
    employee_fullname=models.CharField(max_length=200)
    created_on_date = models.DateTimeField(default=timezone.now)

并创建了下面的视图 -

def did_assignment_form(request, did_selector=0):
    if request.method =="GET":
        if did_selector==0:
            form = DID_Number_Assignment_Model_Form()
        else:
            did_assignment_item = DID_Number_Assignment_Model.objects.get(pk=did_selector)
            form = DID_Number_Assignment_Model_Form(instance=did_assignment_item)
        return render(request, 'MASTERHANDLER/did_assignment_form.html', {'form':form})
    else:
        if id==0:
            context = DID_Number_Assignment_Model.objects.values('did_selector')
            if did_selector not in context: 
                form = DID_Number_Assignment_Model_Form(request.POST)
        else:
            did_assignment_item = DID_Number_Assignment_Model.objects.get(pk=did_selector)
            form = DID_Number_Assignment_Model_Form(request.POST, instance = did_assignment_item)
        if form.is_valid():
            form.save()
        return redirect('did_assignment_list')

下面的表格详细信息-

class DID_Number_Assignment_Model_Form(forms.ModelForm):

    class Meta:
        model = DID_Number_Assignment_Model
        fields = ('did_selector', 'usage_assignment', 'employee_fullname', 'employee_email',  'subscriber_department' )
        labels = {
            'did_selector' : 'DID Selector',
            'usage_assignment' : 'Number Usage ',
            'employee_fullname' : 'Employee Full Name',
            'employee_email' : 'Employee Email',
            'subscriber_department' : 'Employee Department',    

        }



    def __init__(self, *args, **kwargs):
        super(DID_Number_Assignment_Model_Form,self).__init__(*args, **kwargs)
        # TO SET drop down default text for a field , optional -
        self.fields['did_selector'].empty_label = "Select"
        self.fields['usage_assignment'].empty_label = "Select"
        # TO SET a field which may be optional -
        self.fields['subscriber_department'].required = False
        #self.fields['region_assigned'].required = False

这种形式没有问题,但有点奇怪。如果我在 DID_Number_Assignment_Model_Form 中使用 'did_selector' 字段作为外键创建对象,则在下一个创建过程中会显示相同的 'did_selector' 值。

我的问题是,我怎样才能只显示那些没有配置的选择器值。下面的示例截图 -

【问题讨论】:

    标签: django django-models django-forms django-views django-templates


    【解决方案1】:

    我找到了答案。本质上,我正在寻找一种方法来覆盖选择字段上的查询集以排除已使用的选项。

    我在 forms.py 下完成了这项工作,首先创建了一个查询集并获取特定字段的所需值。 然后使用字段上的“queryset”关键字将这些值指定为默认值。

    defs_with_no_assignments = DID_Definition_Model.objects.filter(did_number_assignment_model__isnull=True)
    
    available_did= defs_with_no_assignments.values_list('did_number', flat=True)
    self.fields['did_selector'].queryset = available_did
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-05
      • 2019-01-10
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多