Django 管理员添加数据

Django Admin Adding data

我正在尝试通过 Coding for Entrepreneur 学习 Django。问题出在教程中,当导师在admin.py中添加模型时,显示了字段的值。当我这样做时,它只显示 "something object"。

models.py

from django.db import models

class Join(models.Model):
    email = models.EmailField() 
    ref_id = models.CharField(max_length=120, default='ABC', unique=True)
    ip_address = models.CharField(max_length=120, default='ABC')
    timestamp = models.DateTimeField(auto_now_add = True, auto_now = False)
    updated = models.DateTimeField(auto_now_add = False, auto_now = True)   

    def __unicode__(self):
        return "%s" %(self.email)

    class Meta:
        unique_together = ("email", "ref_id",)


class JoinFriends(models.Model):
    email = models.OneToOneField(Join, related_name="Sharer")
    friends = models.ManyToManyField(Join, related_name="Friend", null=True, blank=True)
    emailall = models.ForeignKey(Join, related_name="emailall")

    def __unicode__(self):
        print(self.friends.all())
        print(self.emailall)
        print(self.email)
        return (self.friends.all()[0].email)

admin.py

from django.contrib import admin
from .models import Join, JoinFriends 

class JoinAdmin(admin.ModelAdmin):
    list_display = ['__unicode__', 'timestamp', 'updated']

    class Meta:
        model = Join

admin.site.register(Join, JoinAdmin)
admin.site.register(JoinFriends)

应该怎样 我做的时候是怎么回事 我该如何解决这个问题。

感谢您的帮助

点击添加加入好友后应该会出现上面显示的页面。当我在 admin.py

中添加以下代码时,它在下一页中完美显示
class FriendAdmin(admin.ModelAdmin):
    list_display = ['__unicode__']


admin.site.register(JoinFriends, FriendAdmin)

但是,当我点击添加加入好友时,页面如上图1所示。

当使用 def __str___(self) 函数时:

我猜你用的是python3。在python3中,用__str__代替了__unicode__

有关详细信息,请参阅 https://docs.djangoproject.com/en/1.7/topics/python3/#str-and-unicode-methods

这行得通。使用Python3时,加上

from __future__ import unicode_literals
from django.utils.encoding import python_2_unicode_compatible
from django.db import models
@python_2_unicode_compatible

并从 admin.py 的 class

中删除 list_display

感谢您的帮助。谢谢

如前所述,Python 3 期望 __str__ 而 Python 2 期望 __unicode__.

在没有 __str__ 方法的情况下调用 Admin 中的对象会导致在 Admin 中显示通用 Join object。而是显示您在 __str__ 方法中定义的任何内容。

此外,在 Py3 中,您不应在 list_display 中使用对 __unicode__ 的调用,因为它不知道您在说什么。我猜想使用您在自己的答案中提供的导入可以使它正常运行,但是继续前进,您应该简单地使用 __str__ 否则您将使用 __unicode__.