Has*_*bal 0 python django django-models django-admin django-postgresql
我的模型如下所示:
from django.contrib.postgres.fields import ArrayField
class Trigger(models.Model):
solutions = ArrayField(models.TextField(blank=True, null=True), blank=True, null=True, help_text='some helpful text')
Run Code Online (Sandbox Code Playgroud)
这使我可以输入默认情况下用逗号分隔的解决方案列表。例如:我可以在该文本字段中输入:
1. watch out for dust.,
2. keep away from furry animals.,
Run Code Online (Sandbox Code Playgroud)
这确实创建了两个单独的字符串项目的列表。但是,如果解决方案文本本身包含逗号,例如:
1. cockroaches, polens and molds might be harmful.
Run Code Online (Sandbox Code Playgroud)
由于该句子中存在逗号,因此这将创建两个单独的解决方案行。
我如何告诉Django使用与逗号不同的定界符,因为它几乎肯定是句子的一部分。如何使用“ |”之类的分隔符?我查看了arrayfield类的内部,但是它不允许任何分隔符。
一些相关文档:
如果您在管理站点上使用内置表单,或者使用ModelForm而不自定义任何字段,则该字段可能会自动使用SimpleArrayField表单字段。看起来您可以覆盖定界符。文档指出此警告:
该字段不支持定界符的转义,因此在定界符是基础字段中的有效字符的情况下要当心。分隔符不必只是一个字符。
无论如何,您可以通过提供这样的自定义表格来实现此目的...
# forms.py
from django import forms
from .models import Trigger
class TriggerForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['solutions'].delimiter = '|' # Or whichever other character you want.
class Meta:
model = Trigger
fields = '__all__'
Run Code Online (Sandbox Code Playgroud)
如果这是在管理站点中使用的话...
# admin.py
from django.contrib import admin
from .forms import TriggerForm
from .models import Trigger
@admin.register(Trigger)
class TriggerAdmin(admin.ModelAdmin):
form = TriggerForm
Run Code Online (Sandbox Code Playgroud)