Django - Пользователь не проходит через форму

Я делаю сайт аукциона и пытаюсь передать пользователя, который сделал ставку на объявление, через форму. Я уже спрашивал о передаче создателя объявления и пробовал тот же метод, но у меня не получается.

Мое представление выглядит примерно так (я сократил его, потому что оно очень длинное):

def show_listing(request, listing_id):
     listing = AuctionListing.objects.get(id=listing_id)
     bidding = listing.bidlisting.last()
     if bidding is None:
        field_name = "starting_bid"
        starting_bid = getattr(listing, field_name)
        createbidform = CreateBid(initial={"bids": starting_bid, "user":request.user})
     else:
        field_name2 = "bids"
        highest_bid = getattr(bidding, field_name2)
        createbidform = CreateBid(initial={"bids": highest_bid, "user":request.user})
     if request.method == "POST":
        form = CreateBid(request.POST)
            if bidding is None and float(form['bids'].value()) >= float(starting_bid):
                if form.is_valid():
                        message = "Your bid is placed"
                        form.instance.listing = listing
                        form.save()
                        createbidform = CreateBid(initial={"bids": form['bids'].value(), "user":request.user})
                        amount_bids = len(Bid.objects.filter(listing=listing_id))
                        return render(request, "auctions/listing.html", {
                         "createbidform" : createbidform
                        })
                else: 
                    print(form.errors)
     return render(request, "auctions/listing.html", {
                        "bidform" : createbidform
                        })

listing.html выглядит примерно так:

<form method="POST">
        {% csrf_token %}
            &#36;{{ bidform.bids }}
            <button type="submit" name="bidbid" class="btn btn-primary save btn-sm">Place your bid</button>
        
    </form>

ПРЯМО СЕЙЧАС form.errors печатает:

<ul class="errorlist"><li>user<ul class="errorlist"><li>This field is required.</li></ul></li></ul>

Вот модель Ставка:

class Bid(models.Model):
    listing = models.ForeignKey(AuctionListing, on_delete=models.CASCADE, related_name="bidlisting")
    bids = models.DecimalField(max_digits=6, decimal_places=2)
    user = models.ForeignKey(User, on_delete=models.CASCADE, db_constraint=False, related_name="userrr")
    def __str__(self):
        return str(self.bids)

А вот форма CreateBid:

class CreateBid(forms.ModelForm):
    class Meta:
        model = Bid
        fields = ('bids', 'user')
        widgets = {
            'user': forms.HiddenInput(),
        }

    def __init__(self, *args, **kwargs):
        user = kwargs.pop('user')
        super().__init__(*args, **kwargs)
       
        self.fields['user'].initial = user.id

По какой-то причине он не указывает пользователя, который разместил торги в форме, в результате чего форма не является действительной. Как это исправить?

Вы уже делаете это с помощью заявок, поэтому вам не нужен дополнительный kwarg:

 createbidform = CreateBid(initial={'bids': starting_bid, 'user': request.user})

вы можете удалить __init__ форму метода CreateBid форму класса

Шаблон:

<form method="POST">
        {% csrf_token %}
            &#36;{{ bidform }}
            <button type="submit" name="bidbid" class="btn btn-primary save btn-sm">Place your bid</button>
        
    </form>
Вернуться на верх