选择字段形式的Django实际值

问题描述

我有这样的模型:

class Projects(models.Model):
    project = models.CharField(max_length=150,blank=True,null=True)

    def __str__(self):
        return self.project

class Profile(models.Model):
    user = models.OnetoOneField(get_user_model(),on_delete=models.CASCADE)
    project = models.ForeignKey(Projects,on_delete=models.CASCADE,null=True,blank=True)
    
    def __str__(self):
        return self.user.username

我还制作了一个表单,用于更改当前的项目分配的配置文件

class ProjectForm(ModelForm):
    class Meta:
        model = Profile
        fields = [
            'project'
        ]

我的视图如下:

def change_project(request,user):
    user = User.objects.filter(username=user)[:1].get()
    profile = Profile.objects.get(user=user)
    form = ProjectForm(request.POST,instance=profile)
    if request.method == 'POST':
            if form.is_valid():
                form.save()
    context = {'form': form}
    return render(request,'datafiller/change_project.html',context)

我可以使用此表单更改项目,但是每次我想再次使用looks like this表单

如何显示当前项目而不是“ ------”?

解决方法

如果您使用GET请求来渲染表单,则不应将ProjectForm放下:

from django.shortcuts import get_object_or_404

def change_project(request,user):
    profile = get_object_or_404(Profile,user__username=user)
    if request.method == 'POST':
        form = ProjectForm(request.POST,instance=profile)
        if form.is_valid():
            form.save()
    else:
        form = ProjectForm(instance=profile)
    return render(request,'datafiller/change_project.html',{'form': form})