0

这些是我的模型的简单版本:

class Device(models.Model):
    name = models.CharField(max_length=100)

    def get_ips(self):
        return self.deviceip_set.all()

    def get_ips_string(self):
        return ', '.join('<a href="http://' + unicode(ip.ip) + '">' + unicode(ip.ip) + '</a>' for ip in self.get_ips())

class DeviceIP(models.Model):
    ip = models.GenericIPAddressField()
    device = models.ForeignKey(Device)

这是来自我的 admin.py:

class DeviceAdmin(admin.ModelAdmin):
    list_display = ('__unicode__', 'get_ips_string')

admin.site.register(Device, DeviceAdmin)

从 MVT/MVC 的角度来看,是否应该get_ips_string()在模型中定义类似的方法,或者它们是否更适合其他地方(如 admin.py),因为它们实际上会生成 HTML?

如果我决定创建自己的模板而不是使用管理站点,那会影响get_ips_string()应该在哪里定义类似的方法吗?

4

1 回答 1

0
  1. 你打算在哪里使用这些方法?如果只在 admin 中使用,最好将它们放入相应ModelAdmin的类中并在fieldsfieldsets或中引用list_display。所以,ModelAdmin对应View层。
  2. 从您的模板的角度来看,这些函数只是只读模型字段。没有特殊地位。

PS对于 Django 管理员定制,您可能会发现django-grappelli( http://grappelliproject.com ) 或xadmin( http://demo.xadmin.io ) 很有启发性。

于 2013-11-14T17:46:01.833 回答