Quiero construir este sistema de marcadores como en Instagram, tengo problemas para escribir la lógica en views.py y mostrarla. Entonces, lo que quiero es marcar "Act" en función de "act-id's" en el modelo de lista de deseos si un usuario está autenticado y sería mejor si usamos Ajax para la llamada posterior (cuando se hace clic en el ícono de marcador) o abierto para nuevas opciones de verdad. Aquí está mi código actual... ¡Por favor ayúdenme! si necesita algún código adicional, hágamelo saber.
modelos.py
class Act(models.Model): label1 = models.CharField(max_length=50, blank=False) label2 = models.ImageField(blank=False, null=True) label3 = models.IntegerField(('year'), choices=YEAR_CHOICES, default=datetime.datetime.now().year) label4 = models.CharField(max_length=80) def __str__(self): return self.Name class Wishlist(models.Model): user_id = models.ForeignKey(User, on_delete=models.CASCADE,null=True) act_id = models.ForeignKey(Act, on_delete=models.DO_NOTHING)vistas.py
@csrf_exempt def wishlist(request): act_id = request.POST.get('act_id') if not act_id: raise ValueError("Required act_id to set wishlist") user_id = request.user.pk try: act_id = Act.objects.get(pk=act_id) wishlist_obj = { 'user_id': user_id, 'act_id': act_id } Wishlist(**wishlist_obj).save() except ObjectDoesNotExist: return HttpResponse('Some error occured, unable to add to wishlist') return HttpResponse('Added to wishlist')urls.py
urlpatterns = [ path('signup/', views.signup, name='signup'), path('login/', views.login_req, name='login'), path("logout/", views.logout_req, name="logout"), path('home/', views.home, name='home'), path('wishlist/', views.wishlist, name='wishlist'), ]para más contexto, aquí hay una imagen conceptual de home.html

[![ingrese la descripción de la imagen aquí][3]][3]
Esta es mi opinión sobre cómo puedes hacer esto.
Lista de deseos el modelo si un usuario está autenticado y sería
Siempre prefiero usar decorators para verificar si el usuario está autenticado. Puede ver aquí cómo lograr esto: escribir su propio decorador para la autenticación de inicio de sesión . Y luego puede simplemente aplicar @login_required para verificar si el usuario está autenticado o no.
También puede simplemente verificar en views.py usando el atributo is_authenticated para verificar si el usuario inició sesión o no.
if request.user.is_authenticated: # do something if the user is authenticatedsería mejor si usamos Ajax para la llamada posterior (al hacer clic en el icono de marcador)
También recomendaría una solicitud de Ajax para actualizar esto, ya que se adapta a una tarea asíncrona. Puede ver el ejemplo aquí sobre cómo puede escribir la función ajax . Pero en resumen, una vez que el usuario haga clic en el botón de bookmark , la solicitud ajax se realizará a la función en views.py con los datos de post relevantes, luego puede simplemente agregar las operaciones deseadas en la función.
Editar:
El problema es bastante amplio y, aunque tengo algunas soluciones, escribir la mayoría con palabras simplemente se volverá complicado para que puedas sacar algo, ¡pero lo intentaré!
Entonces, dado que tiene el modelo que guarda y muestra la tarjeta que se ha incluido en la lista de deseos; por lo tanto, al deshacer esa operación, simplemente tendría que aplicar ingeniería inversa a la lógica usando Ajax. Entonces, en primer lugar, cuando un usuario hace clic para deshacer una tarjeta que se ha incluido en la lista de deseos, realiza una llamada ajax, por ejemplo, aquí y luego en sus views.py simplemente verifica si el elemento en el que se hizo clic está realmente en la lista de deseos al verificar que el objeto existe en su base de datos.
Si existe, simplemente devuelve una JSonResponse({}) exitosa desde la función en views.py y luego en su
success: function (response) { } en su Js , simplemente agregue el código HTML relevante para eliminar la tarjeta de la lista de deseos. Aquí se muestra un buen ejemplo que demuestra cómo puede usar JSON y ajax para actualizar la tarjeta no listada.