我是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