7

Ho cercato di visualizzare una chiave esterna generica nell'amministratore di Django ma non riesco a farlo funzionare. Ho una classe FullCitation che può essere collegata a un NonSupportedProgram o ad una classe SupportedProgram. Quindi, ho usato una chiave straniera generica.Relazioni generiche/chiavi esterne generiche nell'amministratore di Django

in Admin, voglio che gli utenti siano solo in grado di selezionare 'NonSupportedProgram' o 'SupportedProgram' dal menu a tendina content_type e poi, dal campo object_id, ho bisogno degli utenti di essere in grado di selezionare da un menu a tendina che elenca il esistente NonSuportedPrograms o Programmi supportati esistenti, con la possibilità di crearne uno nuovo. È possibile? Dove sto andando male?

models.py

class FullCitation(models.Model) 
    # the software to which this citation belongs 
    # either a supported software program or a non-supported software program 

    limit = models.Q(app_label = 'myprograms', model = 'supportedprogram') | models.Q(app_label = 'myprograms', model = 'nonsupportedprogram') 
    content_type = models.ForeignKey(ContentType), limit_choices_to = limit,) 
    object_id = models.PositiveIntegerField() 
    content_object = generic.GenericForeignKey('content_type', 'object_id') 

    is_primary = models.BooleanField(help_text="Is this the Primary Citation for the software program?") 
    class Meta: 
     unique_together = ('content_type', 'object_id') 
     app_label = 'myprograms' 

reversion.register(FullCitation) 

class NonSupportedProgram(models.Model): 
    title = models.CharField(max_length=256, blank = True) 
    full_citation = generic.GenericRelation('FullCitation') 

    class Meta: 
     app_label = 'myprograms' 
reversion.register(NonSBGridProgram) 

class SupportedProgram(models.Model): 
    title = models.CharField(max_length=256, blank = True) 
    full_citation = generic.GenericRelation('FullCitation') 
    # and a bunch of other fields..... 

admin.py

class FullCitationAdmin(reversion.VersionAdmin): 
    fieldsets = (
    ('Which Program', { 
     'fields': ('content_type', 'object_id',), 
    }), 
    ('Citation Information', { 
     'fields': ('is_primary',), 
    }),) 
# autocomplete_lookup_fields = { 
#  'generic': [['content_type', 'object_id']], 
#  } 

# inlines = ['NonSupportedProgramInline', ] 

list_display = ('content_object', 'is_primary',) 
search_fields = ('content_object__title',) 
# list_filter = ('content_object',) 
+0

Hai mai sistemato questo? – Sardathrion

+0

No, non l'ho mai capito. Dovevo fermare questo approccio e fare qualcosa di completamente diverso. Non esattamente quello che volevo, ma vabbè. – steph

+0

Bummer. Grazie. – Sardathrion

risposta

Problemi correlati