Django - Admin - Добавить ссылку в change_form, перенаправить на другую change_form - установить поле со значением - PullRequest
0 голосов
/ 15 октября 2019

Я открыл пост, посвященный этой теме, но не получил ответа ...

, чтобы возобновить: у меня есть форма № 1 со ссылкой, когда я нажимаю на эту ссылку, новая форма № 2 спод-форма открыта

сейчас, я хотел бы, чтобы поле формы № 2 (открытое после нажатия на ссылку формы № 1) было предварительно заполнено значением, полученным из формы № 1

все это происходит в админке Django

admin.py

from django.contrib import admin
from .models import Participante, Visite, Inclusion, BilanBiologique, ExamenBiologique

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

class VisiteAdmin(admin.ModelAdmin):
    inlines = [BilanBiologiqueLinkInline,]

class InclusionAdmin(admin.ModelAdmin):
    readonly_fields = ('examen',)
    model = Inclusion
    fields = ('vis',('inc_tdr','examen'),)


admin.site.register(Participante)
admin.site.register(Visite, VisiteAdmin)
admin.site.register(BilanBiologique, BilanBiologiqueAdmin)
admin.site.register(Inclusion, InclusionAdmin)

models.py

from django.db import models
from django.urls import reverse
from django.utils.safestring import mark_safe
from django.core.validators import RegexValidator

class Participante(models.Model):

    pat_ide = models.AutoField(primary_key=True)
    pat_ide_prn_cse = models.CharField("Identifiant Princesse",
        max_length=14,
        validators = [
            RegexValidator(
                regex='^SP[M|F][0-9]{11}$',
                message= 'L\'identifiant doit être au format requis',
                code='invalid_participant_id'
            ),
        ], 
        unique=True
        )
    pat_inc_dat = models.DateField("Date d'inclusion")

    def __str__(self):
        return f"{self.pat_ide_prn_cse}"

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}"
...