Comment puis-je obtenir la liste de tous les éléments avec une requête reçue?


Malais Parmar

Je crée un projet Django dans lequel j'ai une liste d'utilisateurs qui contient divers éléments. Chaque article a son attribut comme le nom, la quantité et la date.

Voici mon modèle d'articles:

class Item(models.Model):
    STATUS = (
        ('BOUGHT', 'BOUGHT'),
        ('NOT AVAILABLE', 'NOT AVAILABLE'),
        ('PENDING', 'PENDING'),
    )
    userlist = models.ForeignKey(userList, on_delete=models.SET_NULL, blank=True, null=True)
    item_name = models.CharField(max_length=200, null=True)
    item_quantity = models.CharField(max_length=200, null=True)
    item_status = models.CharField(max_length=200, null=True, choices=STATUS)
    date = models.DateField(null=True)

    def __str__(self):
        return self.item_name

Voici mon views.py:

def listView(request):
    if request.user.is_authenticated:
        fd = None
        user_id = request.user.id
        userlist, created = userList.objects.get_or_create(user_id=user_id)
        items = userlist.item_set.all()
        if request.body:
            data = json.loads(request.body)
            fd=data['date']
    else:
        items = None

    context = {'items': items}
    return render(request, 'list_manager/index.html', context)

Ici, fd est la requête «date» reçue du corps. Par défaut, les éléments contiennent tous les éléments présents dans la liste. Maintenant, je veux juste la liste des objets qui ont item.date == fd, comment puis-je y parvenir?

Vishal Singh

Vous pouvez utiliser request.POST[Django-Docs] au lieu d'utiliser le module json pour charger le corps de la requête. Si ce request.POST.get("date")n'est pas un objet datetime mais une chaîne, vous devez l'analyser en objet datetime en utilisant datetime.strptime().

def listView(request):
    if request.user.is_authenticated:
        fd = None
        user_id = request.user.id
        userlist, created = userList.objects.get_or_create(user_id=user_id)
        items = userlist.item_set.filter(date=request.POST.get("date"))
    else:
        items = None

    context = {"items": items}
    return render(request, "list_manager/index.html", context)

Articles connexes