0

Mon modèle ressemble à ceci:Django Administrateur modèle ArrayField modifier DELIMITER

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') 

Cela me permet d'entrer une liste de solutions séparées par une virgule par défaut. Par exemple: Je peux entrer dans ce champ de texte:

1. watch out for dust., 
2. keep away from furry animals., 

Cela crée une liste de deux éléments de chaîne distincts. Toutefois, si un texte de solution elle-même contient une virgule, par exemple:

1. cockroaches, polens and molds might be harmful. 

Cela va créer deux lignes de solutions séparées, en raison de l'existence d'une virgule dans cette phrase. Comment puis-je dire à django d'utiliser un délimiteur différent de la virgule car il ferait presque certainement partie des phrases. Comment puis-je utiliser un séparateur comme '|'? J'ai regardé à l'intérieur de la classe arrayfield, mais cela n'autorise aucun séparateur.

+0

Je ne suis pas sûr que je considérerais cela comme un doublon, mais il peut vous pointer dans la bonne direction: https://stackoverflow.com/ques tions/31426010/better-arrayfield-admin-widget –

+0

cette question est un sur-ensemble. –

Répondre

2

Certains documents pertinents:

Si vous utilisez construit des formulaires sur le site d'administration, ou en utilisant un ModelForm sans personnalisation des champs, le champ est probablement automatiquement en utilisant le champ de formulaire SimpleArrayField. Il semble que vous pouvez remplacer le caractère délimiteur. Les états de documentation cette mise en garde:

Le champ ne supporte pas échapper du délimiteur, alors soyez prudent dans les cas où le délimiteur est un caractère valide dans le champ sous-jacent. Le délimiteur n'a pas besoin d'être un seul caractère.


Quoi qu'il en soit, vous pouvez le faire en fournissant un formulaire personnalisé comme celui-ci ...

# 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__' 

Et si cela est pour une utilisation dans le site admin ...

# admin.py 

from django.contrib import admin 
from .forms import TriggerForm 
from .models import Trigger 


@admin.register(Trigger) 
class TriggerAdmin(admin.ModelAdmin): 
    form = TriggerForm