Django管理站点:需要帮助

2024-05-23 11:57:18 发布

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

我试图自定义djando admin.py。我想在类ContributionAdmin中注册一个模型Contribution。在管理接口中,我需要从另一个模型Subscriber打印一个字段application_number编号。与模型之间存在外键关系。如何做到这一点

管理员.py

class ContributionAdmin(admin.ModelAdmin):
    list_display = ('id','nlcc','subscriber','date','receipt_number','amount', 'status')
    list_filter =  ('nlcc',)
    search_fields = ('receipt_number',)
    exclude = ('subscriber',)
admin.site.register(models.Contribution, ContributionAdmin)

型号.py:

class Subscriber(models.Model):
   nlcc = models.ForeignKey(NLCC)
   name = models.CharField(max_length=100,blank=True,null=True)
   type = models.CharField(max_length=50, choices=SUBSCRIBER_TYPE)
   application_date =  models.DateField(null=True)
   application_number =  models.IntegerField()
   staff_agent = models.ForeignKey(StaffAgent, null=True, on_delete=models.SET_NULL)

class Contribution(models.Model):
   nlcc = models.ForeignKey(NLCC)
   subscriber = models.ForeignKey(Subscriber)
   staff_agent = models.ForeignKey(StaffAgent, null=True, on_delete=models.SET_NULL)
   date = models.DateField(null=True)
   initial = models.BooleanField(default=False)
   govt =  models.BooleanField(default=False)
   receipt_number = models.BigIntegerField()
   amount = models.DecimalField(max_digits=10, decimal_places=2)
   status = models.CharField(max_length=50, choices=CONTRIBUTION_STATUS)
   status_date = models.DateField(null=True)
   deleted = models.BooleanField(default=False)
   package = models.ForeignKey('CourierPackage', null=True, on_delete=models.SET_NULL, related_name='contribution')

或者有没有办法返回Subscriber名称而不是对象


Tags: py模型truenumberdateadminapplicationmodels
1条回答
网友
1楼 · 发布于 2024-05-23 11:57:18

创建一个将返回所需字段的方法,并将此方法的名称添加到list_display

class ContributionAdmin(admin.ModelAdmin):

    list_display = ('id','nlcc','subscriber','application_number',
                    'date','receipt_number','amount', 'status')    

    def application_number(self, obj):
        return obj.subscriber.application_number
    application_number.short_description = "Subscriber's Application Number"

更新:如果您想在subscriber字段的选择框中看到nameapplication_number,那么最简单的解决方案是定义Subscriber模型的__unicode__方法:

class Subscriber(models.Model):
    ...
    def __unicode__(self):
        return u'%s: %s' % (self.name, self.application_number)

更新2:如果订阅服务器的数目太长,则可以使用^{}属性:

class ContributionAdmin(admin.ModelAdmin):
    raw_id_fields = ('subscriber', )

更新3:要使此字段为只读,请使用^{}

class ContributionAdmin(admin.ModelAdmin):
    readonly_fields = ('subscriber', )

相关问题 更多 >

    热门问题