【问题标题】:Django ModelForm display model field of foreign key instead object idDjango ModelForm 显示模型字段的外键而不是对象 id
【发布时间】:2020-12-07 15:17:15
【问题描述】:

我正在尝试在模板的选择字段中显示模型字段。我正在使用在选择字段中选择的外键。问题是只显示了对象 id。

如何让它显示我的外键的模型字段(例如证书模型中的“crt_id”)而不是对象和 id? (见图)

提前谢谢你

我的代码:

证书模型

class Certificate(models.Model):
    crt_id = models.CharField(max_length=60)
    crt_expire = models.DateTimeField()
    crt_active = models.BooleanField(default=False)

设备型号

class Device(models.Model):
    device_name = models.CharField(max_length=64)
    device_group = models.CharField(max_length=64)
    device_certificate = models.ForeignKey(Certificate, models.SET_NULL, blank=True, null=True)

forms.py

class DeviceForm(forms.ModelForm):

    device_group = forms.CharField(required=False)
    device_name = forms.CharField(required=True)

    class Meta:
        model = Device
        fields = [
            'device_name',
            'device_group',
            'device_certificate'
        ]

【问题讨论】:

    标签: python django django-models django-forms


    【解决方案1】:

    您需要定义模型将返回的内容。

    只需在设备模型定义的末尾添加如下内容:

    def __str__(self):
        return self.device_name
    

    或者您希望退回的任何东西,或者根据您的情况,它会是:

    def __str__(self):
        return self.device_certificate
    

    并在证书模型中执行相同的操作以指示它应该返回什么。

    一种流行的做法是像这样组合多个字段:

    def __str__(self):
        return self.device_name + ' (' + self.device_certificate + ')'
    

    或您需要的任何其他组合。

    【讨论】:

    • 顺便说一句,您可以通过组合字段、进行计算或您希望显示的任何其他内容来构造您想要返回的任何内容。
    【解决方案2】:

    只需在您的外部参考模型产品中添加 str 函数即可。

    class Certificate(models.Model):
        crt_id = models.CharField(max_length=60)
        crt_expire = models.DateTimeField()
        crt_active = models.BooleanField(default=False)
    
      def __str__(self):
          return str(self.id)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-19
      • 1970-01-01
      • 1970-01-01
      • 2010-12-08
      • 1970-01-01
      • 2014-05-22
      • 2021-10-24
      • 2013-02-07
      相关资源
      最近更新 更多