Thursday, October 17, 2019

form_add with pre-filled fields

Hi,

I have a models with 3 classes: Visite, Inclusion, BilanBiologique and ExamenBiologique

- Inclusion is linked to Visite (OneToOne)
- BilanBiologique is linked to Visite (ForeignKey)
- ExamenBiologique is linked to BilanBiologique (ForeignKey)
- ExamenBiologique is a subform of BilanBiologique

I use Django admin form
I try to customize my Inclusion admin form to

- have a link that redirect user to BilanBiologique
AND
- I would like the "vis" field (which is the ForeignKey) to be pre-filled with the corresponding value (I can retrieve this value from Inclusion)

I manage to display a link from Inclusion to BilanBiologique using a method "examen" in Inclusion class
I have think about using GET method but to be honest I am lost... I have no idea how to proceed...

models.py

    class Visite(models.Model):
        vis_ide = models.AutoField(primary_key=True)
        pat = models.ForeignKey(Participante, verbose_name='Participante', related_name='visites', on_delete=models.CASCADE)
        vis_dat = models.DateField("Date de consultation")
   
        def __str__(self):
            return f"{self.pat.pat_ide_prn_cse} / {self.vis_dat}"
   
    class BilanBiologique(models.Model):
        bio_ide = models.AutoField(primary_key=True)
        vis = models.ForeignKey(Visite, verbose_name='Visite', on_delete=models.CASCADE)
        bio_dat = models.DateField("Date de prélèvement")
   
        def __str__(self):
            return f"{self.bio_ide}"
   
        @property
        def date_visite(self):
            return self.vis.vis_dat
   
        date_visite.fget.short_description = 'Date de la visite'
   
        @property
        def participante(self):
            return self.vis.pat.pat_ide_prn_cse
   
        participante.fget.short_description = 'Participante'
   
    class ExamenBiologique(models.Model):
        bio_exa_ide = models.AutoField(primary_key=True)
        bio = models.ForeignKey(BilanBiologique, verbose_name='Bilans', related_name='examens',on_delete=models.CASCADE)
        bio_exa_cod = models.IntegerField("Type d'examen")
        bio_exa_res_num = models.FloatField("Résultat numérique", null=True, blank=True)
        bio_exa_res_mod = models.IntegerField("Résultat modalité", null=True, blank=True)
        bio_exa_uni = models.IntegerField("Unité", null=True, blank=True)
        bio_exa_val_inf = models.FloatField("Limite inférieure", null=True, blank=True)
        bio_exa_val_sup = models.FloatField("Limite supérieure", null=True, blank=True)
   
        def __str__(self):
            return f"{self.bio_exa_ide}"
   
    class Inclusion(models.Model):
        readonly_fields = ('examen',)
   
        inc_ide = models.AutoField(primary_key=True)
        vis = models.ForeignKey(Visite, verbose_name='Visite', related_name='inclusions', on_delete=models.CASCADE)
        inc_tdr = models.IntegerField("Test rapide Determine® VHB (AgHBs)")
   
        def examen(self):
            changeform_url = reverse('admin:ecrf_bilanbiologique_add')
            return mark_safe('<a href="{u}" target="_blank">Ajouter un bilan</a>'.format(u=changeform_url))
        examen.short_description =''
        examen.allow_tags = True
   
        def __str__(self):
   
            return f"{self.vis} / {self.inc_ide}"

admin.py

    from django.contrib import admin
    from .models import Participante, Visite, Inclusion, BilanBiologique, ExamenBiologique
    from .forms import InclusionFormAdmin, BilanBiologiqueFormAdmin
   
    class ExamenBiologiqueInline(admin.TabularInline):
        model = ExamenBiologique
        extra = 0
   
    class BilanBiologiqueAdmin(admin.ModelAdmin):
        inlines = [ExamenBiologiqueInline,]
   
    class BilanBiologiqueLinkInline(admin.TabularInline):
        readonly_fields = ('examen', )
        model = BilanBiologique
        extra = 0
        fields = ('bio_ide', 'vis', 'bio_dat','examen')
        form = BilanBiologiqueFormAdmin
   
    class VisiteAdmin(admin.ModelAdmin):
        inlines = [BilanBiologiqueLinkInline,]
   
    class InclusionAdmin(admin.ModelAdmin):
        readonly_fields = ('examen',)
        model = Inclusion
        fields = ('vis',('inc_tdr','examen'),)
        form = InclusionFormAdmin
   
   
    admin.site.register(Participante)
    admin.site.register(Visite, VisiteAdmin)
    admin.site.register(BilanBiologique, BilanBiologiqueAdmin)
    admin.site.register(Inclusion, InclusionAdmin)


--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/fee18697-d98d-40be-b7ed-18322bfc3652%40googlegroups.com.

No comments:

Post a Comment