Django Admin添加数据

时间:2015-02-09 14:29:55

标签: python django admin

我正在尝试通过Coding for Entrepreneur学习Django。问题出在本教程中,当教师在admin.py中添加模型时,会显示字段的值。当我这样做时,它会显示出某些对象"只要。

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)

应该如何 enter image description here 当我这样做时它是如何发生的 enter image description here 我该如何解决这个问题。

感谢您的帮助

单击添加加入好友时,应显示上面显示的页面。当我在admin.py

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


admin.site.register(JoinFriends, FriendAdmin)

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

enter image description here

使用def __str ___(自我)功能时:

3 个答案:

答案 0 :(得分:1)

我猜你正在使用python 3.在python 3中,使用__str__代替__unicode__

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

答案 1 :(得分:0)

这很有效。使用Python 3时,添加

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的类中删除list_display

赞赏了帮助。谢谢

答案 2 :(得分:0)

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

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

此外,在Py3中,您不应该在__unicode__中使用list_display,因为它不会知道您在说什么。我猜你在你自己的答案中使用你提供的导入功能可以让它正常运行,但是在前进的过程中,你应该只使用__str__,否则你会使用__unicode__