簡體   English   中英

Django 遷移未檢測到自定義字段更改

[英]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)

然后我將其更改為CharFieldTextChoices

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.

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