2 votes

Django DateTimeRangeField utilisé avec date_hierarchy

J'ai un DateTimeRangeField que j'aimerais utiliser avec l'interface de django. date_hierarchy pero date_hierarchy a besoin d'un DateField o DateTimeField .

J'ai écrit une fonction pour convertir l'intervalle en un temps de date en utilisant range.lower mais l'utilisation d'un appelant ne semble pas fonctionner.

eg.

@admin.register(models.MyModel)
class MyModelAdmin(AdvancedModelAdmin):

    date_hierarchy = 'date_range_to_datetime'

    def date_range_to_datetime(instance):
        """
        Return a datetime from django date range.
        """
        return instance.range.lower

Existe-t-il un moyen d'utiliser un DateTimeRangeField avec date_hierarchy ?

0voto

Oli Points 65050

Malgré ce que d'autres endroits prétendent, cette peut être fait. Mais vous devez faire deux choses. Tout d'abord, vous devez annoter la valeur inférieure. Ensuite, vous devez dire aux contrôles statiques d'administration de ne pas tenir compte de l'élément _check_date_hierarchy vérifier.

En pratique, ce n'est pas si difficile, mais il faut savoir ce que l'on fait. Voici une version très condensée de cette méthode en action. timeframe est le champ DateTimeRangeField. Veillez simplement à ce que la valeur que vous utilisez pour votre date_hierarchy soit valide pour la base de données, sinon tout explosera.

from django.contrib.postgres.fields.ranges import RangeStartsWith

class SkipDateHeirarchyChecks(admin.checks.ModelAdminChecks):
    def _check_date_hierarchy(self, obj):
        return []

@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
    date_hierarchy = 'starts'
    checks_class = SkipDateHeirarchyChecks

    def get_queryset(self, request):
        qs = super().get_queryset(request).annotate(
            starts=RangeStartsWith('timeframe')
        )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X