[英]Django custom field change not detected by migrations
我在 Django 中有多個自定義字段。首先,他們擴展了PositiveSmallIntegerField
,因為我們使用了 int 選擇,例如:
class BusinessLegalFormField(models.PositiveSmallIntegerField):
choices = [(1,'SRO'), (2, ....]
def __init__(self, *args, **kwargs):
if not args or not args[0]:
kwargs.setdefault('verbose_name', 'Právna forma')
kwargs['choices'] = self.choices
super().__init__(*args, **kwargs)
然后我將其更改為CharField
和TextChoices
:
class BusinessLegalFormField(models.CharField):
class Choices(models.TextChoices):
ZIVNOST = 'zivnost', 'Živnosť'
SRO = 'sro', 'Spoločnosť s ručením obmedzeným'
AS = 'as', 'Akciová spoločnosť'
def __init__(self, *args, **kwargs):
if not args or not args[0]:
kwargs.setdefault('verbose_name', 'Právna forma')
kwargs.setdefault('max_length', 64)
kwargs['choices'] = self.Choices.choices
super().__init__(*args, **kwargs)
問題是我剛剛意識到 Django 沒有檢測到類型更改。 當我將null=True
之類的內容更改為null=False
時,它會被檢測到,但數據庫類型並未從數字更改為字符。
我怎樣才能讓它發揮作用?
文檔中描述了這種情況及其解決方案:
您不能更改自定義字段的基數 class,因為 Django 不會檢測到更改並為其進行遷移...您必須創建一個新的自定義字段 class 並更新您的模型以引用它。
class CustomCharField(models.CharField): ... class CustomTextField(models.TextField): ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.