Django:使用内置用户模型字段创建模型实例

Django: Create a Model instance with the build-in User Model fields

所以我有一个汽车模型。每辆提交的汽车都会分配给一个用户。此外,每个用户都有自己的仪表板,他们可以在其中提交汽车(仅限登录用户)。

from django.db import models
from django.contrib.auth.models import User

class Car(models.Model):
    user = models.ForeignKey(User,on_delete=models.CASCADE,null=True)
    model_car= models.CharField(max_length=200)
    description = models.TextField()
    car_image = models.ImageField(null=True, blank=True)
    date_created = models.DateTimeField(auto_now_add=True)

这是我的 forms.py 我制造汽车的地方。然后我将这个表单渲染到前端。

from django import forms
from django.forms import ModelForm
from tasks.models import Car

class CreateCarForm(ModelForm):
    class Meta:
        model=Car
        fields='__all__'
        exclude = ('user',)

Views.py

def create_car(request):
    
    form = CreateCarForm()
    if request.method=="POST":
 
        form = CreateCarForm(request.POST,request.FILES)
        if form.is_valid():
            form.save()
            messages.success(request,'Car was Created')
            return redirect('create_car')

    context={'form':form}
    return render(request, 'dashboard/create_car.html',context)

现在它只是创建一个汽车实例,但没有选择用户。我想做的是创建这个 Car 实例,但在用户字段中,自动分配当前登录的用户用户名。

我怎样才能做到这一点?

您可以设置包裹在CreateCarForm中的Car实例的.user实例:

from django.contrib.auth.decorators import login_required

<strong>@login_required</strong>
def create_car(request):
    form = CreateCarForm()
    if request.method=='POST':
        form = CreateCarForm(request.POST,request.FILES)
        if form.is_valid():
            form<strong>.instance.user = request.user</strong>
            form.save()
            messages.success(request,'Car was Created')
            return redirect('create_car')

    context={'form':form}
    return render(request, 'dashboard/create_car.html', context)