Django编辑列表表单未更新

Django编辑列表表单未更新,django,django-models,django-forms,Django,Django Models,Django Forms,我在我的网站上有一个列表系统,目前正在创建一个页面,允许用户编辑他们的列表,我已经让它的大部分工作,但我坚持保存他们的更新形式。目前,如果他们保存编辑过的表单而不是更新模型,则会创建一个全新的列表条目,并且仍然保留旧条目。如果有人能看一下我的代码,那就太好了 看法- @login_required(redirect_field_name='login') def editlisting(request, pk): post = JobListing.objects.get(pk=pk)

我在我的网站上有一个列表系统,目前正在创建一个页面,允许用户编辑他们的列表,我已经让它的大部分工作,但我坚持保存他们的更新形式。目前,如果他们保存编辑过的表单而不是更新模型,则会创建一个全新的列表条目,并且仍然保留旧条目。如果有人能看一下我的代码,那就太好了

看法-

@login_required(redirect_field_name='login')
def editlisting(request, pk):

    post = JobListing.objects.get(pk=pk)

    if str(request.user) != str(post.user):
        return redirect("index")

    if request.method == "POST":
        print("test")
        form = JobListingForm(request.POST, instance=post)

        if form.is_valid():
            profile = form.save(commit=False)
            profile.user = request.user
            profile.save()
            return redirect('index')

    else:
        print("else")
        form = JobListingForm(instance=post)

    context = {
        "form": form
    }

    return render(request, "editlisting.html", context)
模型-

class JobListing(models.Model):

    region_choice = (
        ('1', 'Auckland'),
        ('2', 'Wellington'),
        ('3', 'Christchurch')
    )
    industry_choice = (
        ('1', 'Accounting'),
        ('2', 'Agriculture, fishing & forestry'),
        ('3', 'Automotive'),
        ('4', 'Banking, finance & insurance'),
        ('5', 'Construction & Architecture'),
        ('6', 'Customer service'),
    )
    employment_type_choice = (
        ('1', 'Full Time'),
        ('2', 'Part Time'),
        ('3', 'One-off'),
        ('4', 'Other')
    )

    user = models.CharField(max_length=50)
    job_title = models.CharField(max_length=30)
    business_name = models.CharField(max_length=50)
    pay_rate = models.FloatField()
    employment_type = models.CharField(max_length=10, choices=employment_type_choice)
    job_description = models.CharField(max_length=2000)
    business_address_region = models.CharField(max_length=50, choices=region_choice)
    business_address_suburb = models.CharField(max_length=50)
    business_industry = models.CharField(max_length=50, choices=industry_choice)
    contact_method = models.CharField(max_length=50)
    active_listing = models.BooleanField(default=True)

    class Meta:
        verbose_name = 'Job Listing'

    def __unicode__(self):
        return "%s" % self.business_name
我的注册应用程序中的一段代码可能会影响它

def signup(self, request, user):
    SignUpProfile.objects.create(
        user=user,
        account_type=self.cleaned_data['account_type'],
        contact_number=self.cleaned_data['contact_number']
    )
形式-

class JobListingForm(forms.ModelForm):

    class Meta:
        model = JobListing
        fields = ['job_title', 'business_name', 'pay_rate', 'employment_type', 'job_description', 'business_address_region',
            'business_address_suburb', 'business_industry', 'contact_method']
        widgets = {
            'job_title': forms.TextInput(attrs={'class': 'form-input', 'required': 'true', 'placeholder': 'Job Title'}),
            'business_name': forms.TextInput(attrs={'class': 'form-input', 'required': 'true', 'placeholder': 'Name of Business'}),
            'pay_rate': forms.NumberInput(attrs={'class': 'form-input', 'required': 'true', 'placeholder': 'Hourly Rate or One Off Amount'}),
            'employment_type': forms.Select(attrs={'class': 'form-input', 'required': 'true'}),
            'job_description': forms.Textarea(attrs={'class': 'form-textarea', 'required': 'true',
                'placeholder': 'Tell us additional information about your job listing e.g. Times, Business Info, Number of positions etc. (2000 Character Limit)'}),
            'business_address_region': forms.Select(attrs={'class': 'form-input', 'required': 'true'}),
            'business_address_suburb': forms.TextInput(attrs={'class': 'form-input', 'required': 'true', 'placeholder': 'Business Suburb'}),
            'business_industry': forms.Select(attrs={'class': 'form-input', 'required': 'true'}),
            'contact_method': forms.TextInput(attrs={'class': 'form-input', 'required': 'true', 'placeholder': 'Email or Contact Number'}),
        }

为什么要设置
profile.user=request.user
,因为它在插入新记录时已经存在。我本来想删除它,但即使删除了它也不能解决问题。既然已经删除了它,如果让
表单.save()
提交更改,它还会创建新条目吗?(您是否覆盖了任何保存方法)是的,它仍然会创建新条目。唯一可能影响它的保存方法是我正在使用的注册应用程序allauth要求我编写的内容。因为我扩展了模型,所以我需要在注册表单中加入一个注册函数。我将把它添加到我的帖子中。请发布JobListingForm的代码。为什么要设置
profile.user=request.user
,因为它在插入新记录时已经存在。我本来想删除它,但即使删除了它也不能解决问题。既然您已经删除了它,如果让
表单.save()
提交更改,它还会创建新条目吗?(您是否覆盖了任何保存方法)是的,它仍然会创建新条目。唯一可能影响它的保存方法是我正在使用的注册应用程序allauth要求我编写的内容。因为我扩展了模型,所以我需要在注册表单中加入一个注册函数。我会将其添加到我的帖子中。请发布JobListingForm的代码。