首页 > 解决方案 > 用户如何在 django 中将元素添加到他们的个人资料中?

问题描述

我正在编写一个 django 视图,该视图应该允许用户将动画添加到他们的个人资料中,但我不确定如何实际执行此操作。这个想法是用户点击一个按钮,上面写着“添加动漫”,并将其添加到他们个人资料中的列表中。

我有这个函数叫做'favorite',但到目前为止它什么也没做。这个想法是,一旦他们提出发布请求,它就会将其添加到用户的个人资料中。

def homepage(request):
   
   if request.method == 'POST':
       animes_url = 'https://api.jikan.moe/v3/search/anime?q={}&limit=6&page=1'
       
       search_params = {
           'animes' : 'title',
           'q' : request.POST['search']
           
           }

       r = requests.get(animes_url, params=search_params)
       results = r.json()
       
       results = results['results']
       animes = []
       
       if len(results):
           for result in results:
               animes_data = {
                   'Id' : result["mal_id"],
                   'Title' : result["title"],
                   'Episodes' : result["episodes"],
                   'Image' : result["image_url"]
               }
               animes.append(animes_data)
       else:
           message = print("No results found")

       for item in animes:
           print(item)
    
   context = {
   'animes' : animes
   }
       
   return render(request,'home.html', context)

def favorite(request, pk):
   if request.method == 'POST':
       favorite = Anime.objects.get(pk=pk)
       user = request.user
       user.profile.add(favorite)
       messages.add_message(request, messages.INFO, 'Anime Favorited.')
       return redirect('home')

这些是模型:

class Anime(models.Model):

   title = models.CharField('Title', max_length=150)
   episodes = models.IntegerField()
   image = models.ImageField()
   

   def __str__(self):
       return self.title

class Profile(models.Model):
   user = models.OneToOneField(User, on_delete=models.CASCADE)
   favorites = models.ManyToManyField(Anime, related_name='favorited_by', null=True, blank=True)

这是添加它的html:

<form action="/profile">
     <section>
       <div class="col-md-4 col-sm-6 col-lg-3">
         <div class="card">
           
           <div class="card-body text-center">
             <p class="card-title"> <b>{{anime.Title}}</b></p>
             <hr>
             <p class="card-text">Episodes: <b>{{anime.Episodes}}</b></p>
             
             <img src = {{anime.Image}} />
             
           </div>
     </section>
     <input
       type="submit"
       value="Add to profile"
       class="btn btn-danger btn-sm"
       type="button"
   />
       </form>

标签: pythondjango

解决方案


推荐阅读