【问题标题】:Django admin form, field instead of object in foreign keyDjango管理表单,外键中的字段而不是对象
【发布时间】:2016-09-07 04:04:51
【问题描述】:

我使用外来键从我的父对象中引用另一个对象。但是,当我转到 django admin 创建的下拉列表时,我得到的是对象名称而不是字段值。我怎样才能将字段值添加到表单中?

admin.py

    from django.contrib import admin

from .models import Maintenance
from .models import MaintenanceType
from .models import ServiceType

# Register your models here.


class MaintenanceAdmin(admin.ModelAdmin):
    list_display = ('Title','Impact','Service','Description','StartTime','EndTime',)
    list_editable = ('Title','Impact','Service','Description','StartTime','EndTime',)


admin.site.register(Maintenance, MaintenanceAdmin)

class MaintenanceTypeAdmin(admin.ModelAdmin):
    list_display = ('Type',)
    list_editable = ('Type',)

admin.site.register(MaintenanceType, MaintenanceTypeAdmin)

class ServiceTypeAdmin(admin.ModelAdmin):
    list_display = ('Service','Service',)
    list_editable = ('Service','Service',)

admin.site.register(ServiceType, ServiceTypeAdmin)

models.py

from django.db import models

# Create your models here.

class MaintenanceType(models.Model):
    Type = models.CharField(max_length=200)

    class Meta:
                verbose_name = "Planned Maintenance Types"
                verbose_name_plural = "Planned Maintenance Types"

class ServiceType(models.Model):
    Service = models.CharField(max_length=200)

    class Meta:
                verbose_name = "Service Types"
                verbose_name_plural = "Service Types"                

class Maintenance(models.Model):
    Title = models.CharField(max_length=200)
    Impact = models.ForeignKey(MaintenanceType)
    Service = models.ForeignKey(ServiceType)
    Description = models.TextField()
    StartTime = models.DateTimeField()
    EndTime = models.DateTimeField()

    class Meta:
                verbose_name = "Planned IT Maintenance"
                verbose_name_plural = "Planned IT Maintenance"                

【问题讨论】:

    标签: python django


    【解决方案1】:

    MaintenanceType 模型中实现__str__,它应该以您希望出现在下拉列表中的任何格式返回一个字符串(实际上是在其他任何地方)。

    看来您只需要return self.Type

    【讨论】:

      【解决方案2】:

      仅限 Python 2

      您可以通过设置 unicode 方法来指定通过访问对象返回的内容,以重新调整您想要的内容。

      所以我认为你的MaintenanceType 应该是这样的

      class MaintenanceType(models.Model):
          Type = models.CharField(max_length=200)
      
          class Meta:
                      verbose_name = "Planned Maintenance Types"
                      verbose_name_plural = "Planned Maintenance Types"
      
          def __unicode__(self):
              return self.Type
      

      【讨论】:

      • 这只与Python2有关
      • 对于 Python3,请改用 def __str__(self):。检查this answer 是否向后兼容。
      猜你喜欢
      • 2022-11-13
      • 1970-01-01
      • 1970-01-01
      • 2019-08-19
      • 1970-01-01
      • 1970-01-01
      • 2013-01-20
      • 2016-11-22
      • 2013-08-18
      相关资源
      最近更新 更多