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__
.
我正在尝试通过 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)
当使用 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__
.