我正在尝试通过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)
应该如何
当我这样做时它是如何发生的
我该如何解决这个问题。
感谢您的帮助
单击添加加入好友时,应显示上面显示的页面。当我在admin.py
中添加以下代码时,在下一页中完美显示class FriendAdmin(admin.ModelAdmin):
list_display = ['__unicode__']
admin.site.register(JoinFriends, FriendAdmin)
但是,当我点击添加加入好友时,页面如图1所示。
使用def __str ___(自我)功能时:
答案 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__
。