Django - 从不同的表中获取数据以显示在管理员中,得到错误"NoneType"对象没有属性"user"



我是Django的初学者。 我正在尝试制作管理页面,我想在其中显示表(计费配置文件(中的列(用户(,这是订单表的外键。

我已经创建了如下所示的订单模型。

订单模型

class Order(models.Model):
    billing_profile     = models.ForeignKey(BillingProfile, null=True, blank=True)
    order_id            = models.CharField(max_length=120, blank=True) # AB31DE3
    shipping_address    = models.ForeignKey(Address, related_name="shipping_address",null=True, blank=True)
    billing_address     = models.ForeignKey(Address, related_name="billing_address", null=True, blank=True)
    cart                = models.ForeignKey(Cart)
    def __str__(self):
        return self.order_id

计费配置文件模型如下所示。

计费配置文件模型

class BillingProfile(models.Model):
    user        = models.OneToOneField(User, null=True, blank=True)
    email       = models.EmailField()
    active      = models.BooleanField(default=True)
    def __str__(self):
        return self.email

管理页面的代码如下。

admin.py

class OrderAdmin(admin.ModelAdmin):
    list_display = ['__str__', 'billing_profile','get_user']
    class Meta:
        model = Order
    def get_user(self, obj):
        return obj.billing_profile.user
admin.site.register(Order,OrderAdmin)

当我尝试获取特定计费配置文件的用户时,我收到"NoneType"对象没有属性用户的错误。 这可能是由于订单表中的几行是空的。我不能显示其余行的用户吗?

事实上,这是因为订单的配置文件是 none/null,管理员将显示此错误。尝试:

class OrderAdmin(admin.ModelAdmin):
    list_display = ['__str__', 'billing_profile','get_user']
    class Meta:
        model = Order
    def get_user(self, obj):
        return obj.billing_profile.user if obj.billing_profile else None
admin.site.register(Order,OrderAdmin)

添加:obj.billing_profile.user,如果obj.billing_profile否则 None,则仅在 obj(订单(具有配置文件时返回用户。

一个简单的方法是修改你的get_user方法:

class OrderAdmin(admin.ModelAdmin):
    list_display = ['__str__', 'billing_profile','get_user']
    class Meta:
        model = Order
    def get_user(self, obj):
        try:
            return obj.billing_profile.user
        except AttributeError:
            return None

相关内容

  • 没有找到相关文章

最新更新