没有什么错设置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)
,则此方法效率会更高。
谢谢我注意到你在选项选项中没有指定'primary_key = True'。使用选择是否会使这种冗余?我只有5个选择这个领域,所以这可能是一个很好的选择,但是使用选择会自动创建一个索引或以另一种方式更高效。我也刚刚看到设置'unique = True'会自动创建一个索引,所以在前两个选项(主键或仅使用唯一)之间有很大的区别? – Yunti
如果您选择路由,那么您将在模型中创建一列,您通常将外键设置为PaymentMethod。基本上,在任何地方你可以使用'payment_type = models.ForeignKey(PaymentMethod)',而不是'payment_choice = models.CharField(....,choices = <支付选项>)。基本上不需要PaymentMethod模型。 –
辉煌,这是理想的谢谢。我有另一个类似的模型只有3个选择,但是可以有多个选项。是否有可能将其纳入模型中,还是必须成为单独的M2M模型? – Yunti