簡體   English   中英

渲染我的 views.py“Django”時我很困惑

[英]I am confused while rendering my views.py "Django"

我的 vews.py:

如果您想讓我分享另一條信息,請隨時詢問!

當我嘗試關閉出價時,我遇到了另一個問題,我 git 這個 django 錯誤

ValueError at /bidding/26
 The view auctions.views.bidding didn't return an HttpResponse object. 
 It returned None instead.

編碼:

 def viewList(request, id):
        # check for the watchlist
        listing = Post.objects.get(id=id)
        user = User.objects.get(username=request.user)
        if listing.watchers.filter(id=request.user.id).exists():
                is_watched = True
        else:
                is_watched = False

       if not listing.activate:
              if request.POST.get('button') == "Close":
                  listing.activate = True
                  listing.save()
       else:
        price = request.POST.get('bid', 0)
        bids = listing.bids.all()
        if user.username != listing.creator.username:
            if price <= listing.price:
                return render(request, 'auctions/item.html', {
                    "listing": listing,
                    'form': BidForm(),
                    "message": "Error! Your bid must be largest than the current bid!",
                    'comment_form': CommentForm(),
                    'comments': listing.get_comments.all(),
                    'is_watched': is_watched,
                })
            form = BidForm(request.POST)
            if form.is_valid():
                bid = form.save(commit=False)
                bid.user = user
                bid.save()
                listing.bids.add(bid)
                listing.bid = price
                listing.save()
            else:
                return render(request, 'acutions/item.html', {'form'})
context = {
    'listing': listing,
    'comment_form': CommentForm(),
    'comments': listing.get_comments.all(),
    'is_watched': is_watched,
    'form': BidForm()
}
return render(request, 'auctions/item.html', context)

模型.py

class Bid(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
bid = models.DecimalField(max_digits=10, decimal_places=2)
time = models.DateTimeField(default=timezone.now)


class Post(models.Model):

# data fields
title = models.CharField(max_length=64)
textarea = models.TextField()

# bid
price = models.FloatField(default=0)
currentBid = models.FloatField(blank=True, null=True)

imageurl = models.CharField(max_length=255, null=True, blank=True)
category = models.ForeignKey(
    Category, on_delete=models.CASCADE, default="No Category Yet!", null=True,  blank=True)

creator = models.ForeignKey(
    User, on_delete=models.PROTECT, related_name="all_creators_listings")

watchers = models.ManyToManyField(
    User, blank=True, related_name='favorite')
date = models.DateTimeField(auto_now_add=True)

# for activated the Category
activate = models.BooleanField(default=False)

bids = models.ManyToManyField(Bid, )

def __str__(self):
    return f"{self.title} | {self.textarea} |  {self.date.strftime('%B %d %Y')}"

在這個視圖中,我添加了我的項目要求(評論/監視列表(書簽)/最后一件事(我有很多問題)是投標系統),它允許用戶在此類帖子上添加投標並讓該帖子的創建者能夠關閉它......請幫助我堅持這個區域,我嘗試了很多次才能理解! 注意我是后端開發的新手

您的代碼中有兩個問題,第一個是 Husam user = User.objects.get(username=request.user.username)顯示的,另一個是在 else 部分的 return 語句中

render(request, 'acutions/item.html', {'form'})而不是上下文對象,您傳遞的字符串被視為python中的set對象,這就是為什么您會收到None type錯誤。

這是重構后的代碼:-

def viewList(request, id):
        # check for the watchlist
        listing = Post.objects.get(id=id)
        user = User.objects.get(username=request.user.username)
        form = BidForm()
        is_watched = listing.watchers.filter(id=request.user.id).exists():
        context = {}
        if not listing.activate:
              if request.POST.get('button') == "Close":
                  listing.activate = True
                  listing.save()
        else:
            price = request.POST.get('bid', 0)
            bids = listing.bids.all()
        if user.username != listing.creator.username:
            if price <= listing.price:
                context.update({'message':"Error! your bid must be largest than the current bid !"})
            else:    
                form = BidForm(request.POST)
                if form.is_valid():
                    bid = form.save(commit=False)
                    bid.user = user
                    bid.save()
                    listing.bids.add(bid)
                    listing.bid = price
                    listing.save()
                else:
                    return render(request, 'acutions/item.html', {'form': form})

        context.update({'listing': listing,
          'comment_form': CommentForm(),
          'comments': listing.get_comments.all(),
          'is_watched': is_watched,
          'form': form})
        return render(request, 'auctions/item.html', context)

您在出價視圖中遇到的錯誤和您共享的視圖是視圖列表,如果您共享出價視圖並突出顯示錯誤行會更好

無論如何,我注意到這一行有一個錯誤: user = User.objects.get(username=request.user)

假設是: user = User.objects.get(username=request.user.username)

希望這可以幫助你一點點

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM