即使在阅读db_column和Django' recomendations上的文档后,我也无法通过此功能获得所需的结果。
这是我的代码的一部分
class DefaultBaseModel(models.Model):
slug = models.SlugField(primary_key=True,
unique=True,
null=False,
blank=False)
class Bill(DefaultBaseModel):
class Payment(DefaultBaseModel):
bill = models.OneToOneField(Bill,
related_name='payments',
on_delete=models.CASCADE,
to_field='slug',
db_column='bill_slug')
我期望在Django的shell上做以下几点:
from apps.bills.models import Payment
p = Payment.objects.first()
p.bill_slug
但是我得到了错误:
Traceback (most recent call last):
File "<console>", line 1, in <module>
AttributeError: 'Payment' object has no attribute 'bill_slug'
那么,
p.bill_id
给了我slug值,但它仍然在创建带有后缀_id的列。
有什么想法吗?
答案 0 :(得分:0)
有什么叫“branch_slug”的吗? Bill
虽然有slug
。在您的示例代码中,我在任何地方都看不到branch
。尝试使用列和表名更简洁,看看它是否正常工作:
class DefaultBaseModel(models.Model):
slug = models.SlugField(unique=True,)
class Meta:
abstract = True
class Bill(DefaultBaseModel):
class Payment(DefaultBaseModel):
bill = models.OneToOneField(Bill, on_delete=models.CASCADE,)
现在这应该有效:
from apps.bills.models import Bill, Payment
b = Bill.objects.first()
b.slug
p = Payment.objects.first()
p.bill.slug