使用注释创建ModelChoiceField

时间:2017-12-05 00:12:31

标签: django forms annotations

我需要制作一个带有性别(男性和女性)的选择器,每个类型都有各自的计数。

例如,如果我的数据库中有4个男性和8个女性,我需要一个带选项的选择标签

  • "选择性别"
  • "男(4)"
  • "女(8)"

在我的Form课程中

gender = forms.ModelChoiceField(
        queryset=Gender.objects.all().annotate(counter=Count('user')),
        required=False,
        label="Gender"
    )

我不知道如何渲染这个选择元素。如果我使用{{ form.gender }},我甚至无法显示选项。我得到Error binding parameter 0 - probably unsupported type。它可能是一个SQLite问题?无论如何,我将使用PostgreSQL作为我的数据库。

有什么建议吗?

编辑:我需要这样的东西,每种情况下有近10个表单字段和可变数量的选项

enter image description here

2 个答案:

答案 0 :(得分:0)

我会这样做。我试过这个,它工作正常。根据您的需要修改它,它也应该正常工作。我只是修改了性别领域的小部件。

class testform(forms.ModelForm):
    class Meta:
        model = names
        fields = ['name', 'gender']

    male = 'male'+str(names.objects.filter(gender='m').count())
    female = 'female'+str(names.objects.filter(gender='f').count())
    choices = ((male, male),(female,female))
    gender = forms.CharField(widget=forms.Select(choices=choices))

答案 1 :(得分:0)

您可以覆盖B(const A&) { std::cout << "Construct B from A\n"; } 的{​​{1}}方法:

    def loadCustomer(sc: SparkContext, customerFilePath: String) = {
      val customerList: Set[String] = if (customerFilePath.isEmpty) Set()
      else {
        sc.textFile(customerFilePath).collect().toSet
      }
      customerList
    }
    ...
    ...

    var customerList = loadCustomer(spark.sparkContext, params.customerFilePath)

    // Filter by customer regular expression and customerList
    val filteredTransactionStream = tranactionStream
                            .filter(x => IDRegex.pattern.matcher(x.customer).matches()).filter{ case(transactionRecord) => !(customerList.contains(transactionRecord.customer))}

并在您的表单中使用此自定义字段:

java.lang.ClassCastException: org.apache.spark.util.SerializableConfiguration cannot be cast to scala.collection.SetLike