将Django表单中的选项作为ID传递

2024-10-01 07:14:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我和django是新来的。 我有两个问题, 我创建了choice表单,我的第一个问题是如何将choice作为ID传递给查询? 所以我将用platform_id__in=[1,7,8] and sourcetype_id__in=[1]替换为platform_id__in=["platform.id"] and sourcetype_id__in=['source.id']

另一个问题是:

t_start = None
t_end = None
platform = None
source = None

如果没有这个,我得到的信息是“赋值前引用局部变量”,是否有更好的方法使视图和窗体跳过此操作?在

以下是我的代码:

型号:

^{pr2}$

观点:

def queryset(request):
    t_start = None
    t_end = None
    platform = None
    source = None
    t_form = TimeSelection()
    p_form = PlatformSelection()
    s_form = SourceSelection()
    if request.method == "POST":
        t_form = TimeSelection(request.POST)
        p_form = PlatformSelection(request.POST)
        s_form = SourceSelection(request.POST)
        if t_form.is_valid() and p_form.is_valid() and s_form.is_valid():
            t_start = t_form.cleaned_data.get('t_start')
            t_end = t_form.cleaned_data.get('t_end')
            platform = p_form.cleaned_data.get('platforms')
            source = s_form.cleaned_data.get('sources')
    else:
        t_form = TimeSelection()
        p_form = PlatformSelection()
        s_form = SourceSelection()
    data = Events.objects.filter(platform_id__in=[1,7,8],
                                 sourcetype_id__in=[1],
                                 event_datetime__range=(t_start, t_end)
                                 )
    return render_to_response('platforms.html', {'t_form': t_form,
                                                 'p_form': p_form,
                                                 's_form': s_form,
                                                 'data': data,
                                                 't_start': t_start,
                                                 'platform': platform,
                                                 'source': source,
                                                 't_end': t_end,
                                                 },
                              context_instance=RequestContext(request))

表格:

class TimeSelection(forms.Form):
    t_start = forms.DateField(widget=forms.DateInput(attrs={'id': 'from'}))
    t_end = forms.DateField(widget=forms.DateInput(attrs={'id': 'to'}))

class PlatformSelection(forms.Form):
    class Meta:
        model = Platforms
    platforms = forms.ModelMultipleChoiceField(queryset=Platforms.objects.all(), required=False)

class SourceSelection(forms.Form):
    class Meta:
        model = Sources
    sources = forms.ModelMultipleChoiceField(queryset=Sources.objects.filter(pk__in=[1, 3]), required=False)

和模板:

<form method="post" action="">{% csrf_token %}
  <div class="row">
    <div class="col-md-6">
      {{ p_form.as_table }}
    </div>
    <div class="col-md-6">
      {{ s_form.as_table }}
    </div>
  </div>
  <div class="col-md-12">
    {{ t_form }}
    <input type="submit" value="Show Charts">
  </div>
</form>

Tags: andindivformnoneidsourcedata
1条回答
网友
1楼 · 发布于 2024-10-01 07:14:25

通常您希望将Choices构建到您的Model中:

class Student(models.Model):
    FRESHMAN = 'FR'
    SOPHOMORE = 'SO'
    JUNIOR = 'JR'
    SENIOR = 'SR'
    YEAR_IN_SCHOOL_CHOICES = (
        (FRESHMAN, 'Freshman'),
        (SOPHOMORE, 'Sophomore'),
        (JUNIOR, 'Junior'),
        (SENIOR, 'Senior'),
    )
    year_in_school = models.CharField(max_length=2,
                                      choices=YEAR_IN_SCHOOL_CHOICES,
                                      default=FRESHMAN)

    def is_upperclass(self):
        return self.year_in_school in (self.JUNIOR, self.SENIOR)

那么您应该能够查询您的Model,而不是在views.py中有那么多代码

相关问题 更多 >