繁体   English   中英

'float' object 在 Django 中没有属性 'set'

[英]'float' object has no attribute 'set' in Django

我是 django 和 python 的新手。 我试图建立一个网站,用户可以在其中对项目进行投标。 他们留下的出价金额被登记为浮动金额。 尝试保存出价时,我收到错误“浮动”object 没有属性“设置”。 这是为什么? 我不知道如何解决它。

models.py,Bid 有一个多对多字段。

class User(AbstractUser):
    pass


class Listing(models.Model):
    title = models.CharField(max_length=100)
    image = models.ImageField(blank=True, upload_to='media', default="noimage.jpg")
    content = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)
    categories = models.CharField(blank=False, max_length=25, choices=category, default="Others")
    seller = models.ForeignKey(User, on_delete=models.CASCADE) ##
    min_bid = models.FloatField(blank=False, validators=[MinValueValidator(0)])

    image_thumbnail = ImageSpecField(source='image', processors=[ResizeToFill(300, 150)], format='JPEG', options={'quality':100})
    image_thumbnail1 = ImageSpecField(source='image', processors=[ResizeToFill(1200, 500)], format='JPEG', options={'quality':100})

    def get_absolute_url(self):
        return reverse('listing-detail', kwargs={'pk': self.pk})


class Bid(models.Model):
    bid = models.FloatField(validators=[MinValueValidator(0)])
    bidder = models.ManyToManyField(User, default=None)
    listed_item = models.ForeignKey(Listing, on_delete=models.CASCADE, default=None)

    def get_absolute_url(self):
        return reverse('listing-detail', kwargs={'pk': self.pk})

视图.py:

method_decorator(login_required, name='post')
class ListingDetailView(DetailView):
    model = Listing


    def post(self, request, pk):
        user = request.user
        bidder = User.objects.filter(username=user)

        #gets the amount from form
        new_bid = float(request.POST["user_bid"])
        item = Listing.objects.get(pk=pk)

        try:
            bid = Bid.objects.get(listed_item=item)
            highest_bid = bid.bid
        except Bid.DoesNotExist:
            bid = None
            highest_bid = item.min_bid

        if new_bid < highest_bid:
            messages.add_message(request, messages.WARNING, "Bid is too low.")

        else:
#error highlights this try: line
            try:
                bid = Bid.objects.get(listed_item=item, bidder=user)
                bid.bid = new_bid
                bid.save()

            except Bid.DoesNotExist:
#since no bids exist, i believe here is the issue at .set

                b = Bid.objects.create(bid=new_bid, listed_item=item)
                b.bid.set(bidder)

            item.min_bid = new_bid
            item.save()
            messages.add_message(request, messages.SUCCESS,
                                 "Bid placed successfully.")

        return redirect('listing-detail', self.kwargs['pk'])

错误回溯:

Traceback (most recent call last):
  File "C:\Users\AG\Desktop\cs50\commerce\auctions\views.py", line 137, in post
    bid = Bid.objects.get(listed_item=item, bidder=user)
  File "C:\Python\Python38\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "C:\Python\Python38\lib\site-packages\django\db\models\query.py", line 415, in get
    raise self.model.DoesNotExist(

During handling of the above exception (Bid matching query does not exist.), another exception occurred:
  File "C:\Python\Python38\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Python\Python38\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Python\Python38\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Python\Python38\lib\site-packages\django\views\generic\base.py", line 71, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\Python\Python38\lib\site-packages\django\views\generic\base.py", line 97, in dispatch
    return handler(request, *args, **kwargs)
  File "C:\Python\Python38\lib\site-packages\django\utils\decorators.py", line 43, in _wrapper
    return bound_method(*args, **kwargs)
  File "C:\Python\Python38\lib\site-packages\django\contrib\auth\decorators.py", line 21, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "C:\Users\AG\Desktop\cs50\commerce\auctions\views.py", line 143, in post
    b.bid.set(bidder)

Exception Type: AttributeError at /listing/11/
Exception Value: 'float' object has no attribute 'set'

看起来您需要将User object 设置为bidder

尝试:

b.bidder.set(bidder)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM