簡體   English   中英

Django 1.7空白CharField / TextField約定

[英]Django 1.7 blank CharField/TextField convention

使用Django的新遷移框架,假設我具有數據庫中已經存在的以下模型:

class TestModel(models.Model):
    field_1 = models.CharField(max_length=20)

我現在想向模型中添加一個新的TextField,所以它看起來像這樣:

class TestModel(models.Model):
    field_1 = models.CharField(max_length=20)
    field_2 = models.TextField(blank=True)

當我嘗試使用python manage.py makemigrations遷移此模型時,出現以下提示:

You are trying to add a non-nullable field 'field_2' to testmodel without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
 1) Provide a one-off default now (will be set on all existing rows)
 2) Quit, and let me add a default in models.py

我可以通過在field_2添加null=True來輕松解決此field_2 ,但是Django的約定是避免在基於字符串的字段(例如CharField和TextField)上使用null(來自https://docs.djangoproject.com/zh-CN/dev/ref/models/字段/ )。 這是一個錯誤,還是我誤解了文檔?

這不是錯誤,而是經過記錄和合乎邏輯的。 您添加了一個新字段,該字段(按照最佳實踐,如您所注意到的那樣)不能為NULL因此django必須為現有記錄添加一些內容-我想您希望它為空字符串。

您可以

 1) Provide a one-off default now (will be set on all existing rows)

因此只需按1,然后提供'' (空字符串)作為值。

或根據建議在models.py中指定default=''

 2) Quit, and let me add a default in models.py
  1. 選擇1,它將通過python終端。
  2. 給定timezone.now(),它將從python終端退出。

注意:它可能不會在第一時間從終端退出,請再次給出該命令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM