2015-02-09 93 views
1

我想通过编码为企业家学习Django。问题出在教程中,当导师在admin.py中添加模型时,会显示字段的值。虽然我这样做,但它只显示“某物体”。Django Admin添加数据

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 但是添加以下代码为好,当我点击添加朋友加盟,页面是在如图一如上图所示。

enter image description here

当使用高清__str ___(个体经营)功能:

+0

你好,你可以看到。主页面正在工作。但当我点击添加页面不显示确切的值。相反,它显示加入对象 – user2556140 2015-02-09 14:40:49

+0

unicode函数中的未封闭双引号是否为拼写错误? – 2015-02-09 14:43:58

+0

你使用的是Python 2还是3? – Alvaro 2015-02-09 14:48:10

回答

0

This Works。当使用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。谢谢

0

如前所述,Python 3预计__str__,而Python 2预计__unicode__

在调用管理的对象,而无需在通用Join object一个__str__方法导致被显示在管理。相反,将显示您在__str__方法中定义的任何内容。另外,在Py3中,你不应该在你的list_display中使用__unicode__的调用,因为它不知道你在说什么。我猜测使用您在自己的答案中提供的进口可以使其正常工作,但前进之后,您应该简单地使用__str__,否则您会使用__unicode__

+0

在主页面中,现在只显示一个字段。如何在python 3中显示必要的字段,与在Python 3中的list_object一样? – user2556140 2015-02-09 15:13:57

+0

只需将每个字段添加到'list_display'。这是您的模型要显示在更改列表中的哪些字段或方法的列表。您无法直接显示多对多字段,但其他字段可以。例如,你可以尝试'list_display = ['__str__','email','emailall']'。 – 2015-02-09 19:02:31

相关问题