将CharField设置为主键没有错,通过将模型更改为:
class PaymentMethod(models.Model):
unique_id = models.CharField(max_length=3, primary_key=True)
last_updated = models.DateTimeField(auto_now=True)
事实上,如果 unique_id 是您将要查询的字段,那么使用它是非常有意义的。您的其他选择是使用现有模型,但使用 unique=True:
class PaymentMethod(models.Model):
unique_id = models.CharField(max_length=3, unique=True)
last_updated = models.DateTimeField(auto_now=True)
在这种情况下,您的主键将是一个自动递增的整数,如您之前所述。
另一个选项取决于您希望在PaymentMethod 模型中存储的记录数量;以及应用程序中其他地方使用数据的位置。太考虑使用model choices field。模型选择字段可能在您的付款或订单模型上(取决于您的应用程序和您要执行的操作)。这消除了对外键的需求,并可能减少应用中的查询数量。
它可能看起来像这样:
class Payment(models.Model):
VISA = 'VIS'
CREDIT = 'CRE'
MASTER_CARD = 'MAS'
PAYPAL = 'PAL'
PAYMENT_OPTIONS= (
(VISA, 'Visa'),
(CREDIT, 'Credit Card'),
(MASTER_CARD, 'Master Card'),
(PAYPAL, 'Paypal')
)
items = models.ForeignKey(Item)
date = models.DateField(auto_now=True)
...
payment_method = models.CharField(max_length=3, choices=PAYMENT_OPTIONS, default=VISA)
PAYMENT_OPTIONS 可用于在使用 django model forms 时在表单上呈现下拉框。否则,用户选择仅限于此模型中列出的选项。
如果您只有PaymentMethod(s) 的一小部分,此方法会更有效。