11
votes

Comment utiliser Can_Add_Related in Django Admin

J'ai lu sur la fonctionnalité Can_add_Related ici: https://code.djangoproject.com/ticket/ 9071

J'ai essayé de l'utiliser de cette façon: xxx

mais cela jette un typeError et je ne sais pas comment résoudre ce problème.

Quelqu'un peut-il me dire dans la bonne direction?

Merci.


1 commentaires

Oui, vous pouvez le voir ici: dpaste.com/740431


4 Réponses :


4
votes

can_add_related code> semble être un attribut sur le widget , pas le champ, alors essayez:

self.fields['person'].widget.can_add_related = False


0 commentaires

19
votes

Cela vient probablement tard. Mais pour d'autres téléspectateurs, référence, xxx


2 commentaires

Pour tous ceux qui essaient que cela fonctionne simplement, même avec Django 1.7 - mais pas avec des inlines. Pour eux, j'ai fini par écraser les widgets, comme expliqué par @sether, voyez ici: lien


Voir cette réponse à la question liée au commentaire de @ Normic pour une solution beaucoup de conciliation pour les inlines (en utilisant get_formset au lieu de get_form) Stackoverflow.com/a / 37558444/1302095



1
votes

Approche alternative, avec modification des options de widget * avant * le formulaire est instancié:

class MyAdmin(django.contrib.admin.ModelAdmin):

    def formfield_for_dbfield(self, *args, **kwargs):
        formfield = super().formfield_for_dbfield(*args, **kwargs)
        if hasattr(formfield, "widget"):
            formfield.widget.can_add_related = False
            formfield.widget.can_delete_related = False
            formfield.widget.can_change_related = False
        else:
            pass  # this relation doesn't have an admin page to add/delete/change

        return formfield


0 commentaires

0
votes

Une autre approche, si vous définissez un modèle inline et utilisez-le dans votre administrateur, seriez-vous à écrase la méthode get_formset : xxx


0 commentaires