Django选择字段形式的实际值

Django选择字段形式的实际值,django,django-forms,foreign-keys,Django,Django Forms,Foreign Keys,我有这样的模型: 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

我有这样的模型:

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
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)
我还制作了一个表格,希望在其中更改当前项目分配的配置文件:

class ProjectForm(ModelForm):
    class Meta:
        model = Profile
        fields = [
            'project'
        ]
我的观点是这样的:

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
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)
我可以使用此表单更改项目,但每次我想再次使用此表单


如何在表单中显示当前项目而不是“-----”?

如果使用GET REQUEUEST呈现表单,则不应将
项目表单设置为地面:

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})
从django.shortcuts导入get\u object\u或\u 404
def变更_项目(请求、用户):
profile=get\u object\u或\u 404(profile,user\u username=user)
如果request.method==“POST”:
form=ProjectForm(request.POST,instance=profile)
如果form.is_有效():
form.save()
其他:
表单=项目表单(实例=配置文件)

返回render(请求'datafiller/change_project.html',{'form':form})
如果使用GET-requeest呈现表单,则不应将
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})
从django.shortcuts导入get\u object\u或\u 404
def变更_项目(请求、用户):
profile=get\u object\u或\u 404(profile,user\u username=user)
如果request.method==“POST”:
form=ProjectForm(request.POST,instance=profile)
如果form.is_有效():
form.save()
其他:
表单=项目表单(实例=配置文件)

返回render(请求'datafiller/change_project.html',{'form':form})
为了清晰起见,您可能应该将ProjectForm重命名为ProfileForm或AssignProjectForm。在项目表单上看到模型配置文件是令人困惑的。是的,你是对的。这是我的第一个项目,我一直在不断地改变,试图弄清楚它们是如何工作的。当我确信一切正常时,我会重新命名一些东西以使它们清晰。也许这不是最好的方法,但就像我说的,我还在学习。非常感谢您的建议:)为了清晰起见,您可能应该将ProjectForm重命名为ProfileForm或AssignProjectForm。在项目表单上看到模型配置文件是令人困惑的。是的,你是对的。这是我的第一个项目,我一直在不断地改变,试图弄清楚它们是如何工作的。当我确信一切正常时,我会重新命名一些东西以使它们清晰。也许这不是最好的方法,但就像我说的,我还在学习。非常感谢您的建议:)