【问题标题】:Use differents models fields in admin.py在 admin.py 中使用不同的模型字段
【发布时间】:2014-04-25 09:23:23
【问题描述】:

我是 django 的新手,我正在使用它。但是我有一个问题,我找不到解决方案。

这是我的代码:

admin.py

from django.contrib import admin
from surveyApp.models import survey, answer

admin.site.register(survey)

class answerAdmin(admin.ModelAdmin):
    list_display = ('answer_text', 'survey', 'category', 'ans_date', survey.get_exp())

admin.site.register(answer, answerAdmin)

models.py

from django.db import models

Create your models here.                                                                                                                                                                                   

class survey (models.Model):
    question = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
    exp_date = models.DateTimeField('date expired')

    def __str__(self):
        return self.question
    def get_exp(self):
        return self.exp_date



class answer (models.Model):
    FB_CAT = (
        ('N', 'Network'),
        ('D', 'Display'),
        ('F', 'Function'),
        )
    survey = models.ForeignKey(survey)
    answer_text = models.CharField(max_length=200)
    category = models.CharField(max_length=1, choices=FB_CAT)
    ans_date = models.DateTimeField('date answered')

    def __str__(self):
        return self.answer_text

所以,我想在我的 list_display(answerAdmin 类)中添加调查的 exp_date。

如何访问它?

现在这段代码给了我一个错误:“str”对象没有属性“exp_date”。

我已经试过了:

survey.get_exp()
'survey.exp_date'
survey.exp_date

但是错误... 我确信有一些简单的方法可以做到。

我提前感谢大家花时间回答我的问题。

保罗

【问题讨论】:

    标签: django django-models django-forms django-admin python-3.4


    【解决方案1】:

    只需向您的AnswerAdmin 添加一个可调用对象:

    from django.contrib import admin
    from surveyApp.models import survey, answer
    
    admin.site.register(survey)
    
    class AnswerAdmin(admin.ModelAdmin):
        list_display = ('answer_text', 'survey', 'category', 'ans_date', 'exp_date')
    
        def exp_date(self, obj):
            return obj.survey.exp_date
        exp_date.short_description = 'Exp Date'
    
        admin.site.register(answer, answerAdmin)
    

    此外,正如一般 Django 建议:模型(或任何其他类)通常大写。因此:

    class Survey (models.Model):
        ....
    

    【讨论】:

      猜你喜欢
      • 2014-06-08
      • 2017-02-05
      • 1970-01-01
      • 2011-11-25
      • 2015-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-14
      相关资源
      最近更新 更多