沒有什麼錯設置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