在Django中创建对象时将当前登录的用户设置为模型中的用户

Set currently logged in user as the user in the model when creating an object in Django

我已经尝试实施我在此处看到的其他一些帖子提供的解决方案,但似乎没有任何效果。我是 django 和后端的新手,所以我可能只是缺乏技巧。

情况是我让用户使用 ModelForm 基于 django 模型 Listings 生成 listing。除了我无法将当前登录的用户设置为 listing 的用户之外,一切似乎都正常。我知道用户存储在 request.user 中,但我似乎无法在我的表单中设置它,而且我一直收到此错误:

IntegrityError at /create

NOT NULL constraint failed: auctions_listings.listing_user_id

这是我的用户和列表模型的代码:

class User(AbstractUser):
    pass

class Listings(models.Model):
    title = models.CharField(max_length=64, default="")
    description = models.TextField(default="")
    image = models.URLField(blank=True, null=True)
    initial_bid = models.DecimalField(max_digits=8, decimal_places=2)
    category = models.CharField(max_length=64, default="Misc") 
    listing_user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="listing_user")
    # listing.bid.all()????

这是我的表格:

from .models import Listings

class ListingsForm(forms.ModelForm):

    class Meta:
        model = Listings
        exclude = ('listing_user')
        fields = [
            'title',
            'description',
            'image',
            'initial_bid',
            'category'
        ]

我发现的一些建议表明我可以排除用户要求,然后在我的视图中自行设置,但每当我尝试排除 listing_user 时,我都会遇到这个问题错误:

TypeError: ListingsForm.Meta.exclude cannot be a string. Did you mean to type: ('listing_user',)?

尝试建议的方法也无济于事。

最后,这是我的看法:

def create(request):
    
    form = ListingsForm(request.POST or None)  
    if form.is_valid():
        form.save()
        form = ListingsForm()

    context = {
        'form': form
    }
    return render(request, "auctions/create.html", context)

exclude 应该是 listtuple。您有两个选择:

exclude = ('listing_user',)
or
exclude = ['listing_user']

表格:

from .models import Listings

class ListingsForm(forms.ModelForm):

    class Meta:
        model = Listings
        exclude = ('listing_user',)
        fields = [
            'title',
            'description',
            'image',
            'initial_bid',
            'category'
        ]

观看次数:

def create(request):
    
    form = ListingsForm(request.POST or None)  
    if form.is_valid():
        form.instance.listing_user = request.user
        form.save()
        form = ListingsForm()

    context = {
        'form': form
    }
    return render(request, "auctions/create.html", context)