Je veux utiliser un modèle pour enregistrer les paramètres du système pour une application django, donc je veux limiter le modèle ne peut avoir qu'un seul enregistrement, comment faire la limite?Limiter un seul enregistrement dans le modèle pour l'application django?
Répondre
Un moyen simple consiste à utiliser le nom du paramètre comme clé primaire dans le tableau des paramètres. Il ne peut y avoir plus d'un enregistrement avec la même clé primaire, ce qui permettra à la fois à Django et à la base de données de garantir l'intégrité.
Un modèle avec une seule ligne autorisée n'est rien de plus qu'une forme pervertie d'un "objet persistant" - peut-être même un "singleton persisté"? Ne fais pas ça, ce n'est pas comme ça que fonctionnent les modèles.
Découvrez https://github.com/danielroseman/django-dbsettings
Essayez ceci:
class MyModel(models.Model):
onefield = models.CharField('The field', max_length=100)
class MyModelAdmin(admin.ModelAdmin):
def has_add_permission(self, request):
# if there's already an entry, do not allow adding
count = MyModel.objects.all().count()
if count == 0:
return True
return False
William est juste, mais je suppose que c'est la meilleure pratique
def has_add_permission(self, *args, **kwargs):
return not MyModel.objects.exists()
Comme indiqué dans la documentation officielle de Django:
N ote: N'utilisez pas ceci si tout ce que vous voulez faire est de déterminer si au moins un résultat existe. Il est plus efficace d'utiliser exists().
https://docs.djangoproject.com/en/dev/ref/models/querysets/#when-querysets-are-evaluated
Écrasement has_add_permission
œuvres, mais dans les exemples donnés, il rompt le système d'autorisations dans Django (personnel sans autorisations nécessaires peuvent ajouter des paramètres). Voici un qui ne le brise pas:
class SettingAdmin(admin.ModelAdmin):
def has_add_permission(self, request):
base_add_permission = super(SettingAdmin, self).has_add_permission(request)
if base_add_permission:
# if there's already an entry, do not allow adding
count = Setting.objects.all().count()
if count == 0:
return True
return False
- 1. Django retourne un seul enregistrement en tant que JSON
- 2. Sélectionnez un seul enregistrement pour chaque match
- 3. Django manager pour _set dans le modèle
- 4. Enregistrement d'un seul NSMutableDictionary dans un plist
- 5. Comment puis-je limiter les choix disponibles pour un champ de clé étrangère dans un modèle de modèle django?
- 6. Django: modèle distinct dir pour le modèle
- 7. forme Django pour le modèle
- 8. django-enregistrement, pour corriger un petit problème
- 9. Modèle Django pour la boucle: Comment effectuez-vous une action pour le premier enregistrement?
- 10. Limiter FCKEditor à un seul format d'entrée dans Drupal?
- 11. django admin.site.name dans le modèle
- 12. has_many_polymorphs multiples dans un seul modèle
- 13. Limiter le nombre de vues par jour dans Django
- 14. Comment limiter le vote des utilisateurs sur leur propre modèle
- 15. Créer un enregistrement où le modèle hérite d'un autre modèle
- 16. Comment limiter la valeur maximale d'un champ numérique dans un modèle Django?
- 17. Django - transactions dans le modèle?
- 18. Retour plusieurs lignes sur un seul enregistrement
- 19. Pourquoi un seul enregistrement après union?
- 20. Concaténer plusieurs valeurs en un seul enregistrement
- 21. Modèle à un seul fil
- 22. django: nom personnalisé pour le modèle dans le site d'administration
- 23. Valeur par défaut pour le champ dans le modèle Django
- 24. Valeur par défaut pour le champ dans le modèle Django
- 25. Django: plusieurs tables pour un modèle.
- 26. Dans django, comment limiter les choix d'un champ étranger basé sur un autre champ dans le même modèle?
- 27. Comment limiter manytomanyfields sur un modèle?
- 28. Django Custom Managers pour le modèle utilisateur
- 29. ajax post pour le modèle django
- 30. Comment créer Django FormWizard pour un modèle?