【问题标题】:Django Multi value on ModelMultipleChoiceFieldModelMultipleChoiceField 上的 Django Multi 值
【发布时间】:2018-06-09 06:25:23
【问题描述】:

models.py

class User(models.Model):
    id = models.CharField(max_length=255)
    name = models.CharField(max_length=255)
    desc = models.TextField()
    created_at = models.DateTimeField(auto_now=True)
    updated_at = models.DateTimeField(auto_now_add=True, null=True)

    def __str__(self):
        return self.user.name

我的表单.py

class PostsForm(forms.ModelForm):
    user = forms.ModelMultipleChoiceField(
        queryset=User.objects.all()
        )
    class Meta:
        model = Posts
        fields = '__all__'

在我上面的代码中,我的表单如下所示:

+------------+
|Select    + |
+------------+
|John Doe    |
|Jessica     |
|Jessica     |
|Alex Joe    |
+------------+

但是这不是我想要的,因为可能有多个名称,而且我知道该值来自我模型上的 def __str__

如何在我的字段上添加另一个 str 将是:

+---------------------+
|Select             + |
+---------------------+
| 012931 - John Doe   |
| 012932 - Jessica    |
| 012933 - Jessica    |
| 012934 - Alex Joe   |
+---------------------+

它在下拉菜单中包含 id + name,或其他信息。

【问题讨论】:

    标签: python django django-models django-forms


    【解决方案1】:

    __str__ 上的User 模型中,您可以按照doc 中的说明进行操作。

    def __str__(self):
        return "{} - {}".format(self.id, self.user.name)
    

    这是self.id 的示例,您可以在那里获得任何值,例如self.name 等。

    【讨论】:

    • 可以用我的forms.py吗?...因为在其他页面上,它只需要name
    • @BudiGunawan 参考此link
    【解决方案2】:

    User 类中,您应该添加下面给出的方法:

    def __unicode__(self):
        return "{} - {}".format(self.id, self.name)
    
    def __str__(self):
        return "{} - {}".format(self.id, self.name)
    

    注意:如果使用Python3.x,则不需要__unicode__()

    【讨论】:

      猜你喜欢
      • 2015-01-14
      • 2013-03-31
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 2015-04-14
      • 1970-01-01
      • 2012-05-22
      • 2017-09-11
      相关资源
      最近更新 更多