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

标签 python django django-models django-forms modelform

我已经尝试实现我在这里看到的其他一些帖子提供的解决方案,但似乎没有任何效果。我对 Django 和后端总体来说是全新的,所以我可能只是缺乏技能。
情况是我让用户生成 listing基于 Django 模型 Listings使用 ModelForm。除了我无法将当前登录的用户设置为 listing 的用户之外,一切似乎都在工作。 .我了解到用户存储在 request.user ,但我似乎无法在我的表单中设置它,并且我始终收到此错误:IntegrityError at /createNOT 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'
        ]
我发现的一些建议表明我可以排除用户要求,然后在我的 View 中自己设置它,但是每当我尝试排除 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 = ('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)

关于python - 在Django中创建对象时将当前登录的用户设置为模型中的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64274464/

相关文章:

database - 断言 django pytest 期间没有数据库更新尝试

python - 全局名称 'get_user_model' 未定义

python - numba 中的函数类型

python - Django:找不到静态文件

python - 当生成器超出范围时清理生成器的优雅机制?

python - 运行测试时 Django 1.5.1 'ImportError: No module named urls'

python - 从 Django 模板中的 response.POST.get() 访问 QueryDict 元素

python - 如何在 Django 模型中创建唯一值?并且还在 Django 中索引一列

python - 如何使用外部 USB 摄像头数据正确格式化 PIL.Image.frombytes

javascript - 使用 Python Flask 将数据注入(inject) javascript