如果记录存在,则添加新记录

时间:2020-09-15 14:40:37

标签: django django-models django-forms django-views

我有一个表单,其中id是模型UserFileUploadModel的隐藏字段。提交表单时,我将此信息保存到其他模型DecryptRequestModel中。但是这里使用的ID来自UserFileUploadModel,所以当我第二次提交表单时,我得到了错误,

<ul class="errorlist"><li>id<ul class="errorlist"><li>Decrypt request model with this Id already exists.</li></ul></li></ul>

那我该怎么办

  1. 让Django处理DecryptRequestModel的ID,每次提交时ID都会递增。 OR
  2. 直接更新上一个条目,其中只有一个字段会更改。

HTML表单:-

<form method="post" action="{% url 'decrypt' %}" enctype="multipart/form-data">
    {% csrf_token %}
    {% for i in objects %}
    <input type="hidden" name="id" value="{{i.id}}" readonly> # ID from other table
    <input type="text" name="email" value="{{i.filename}}" readonly>
    <input type="hidden" name="algorithms" value="{{i.algorithms}}">
    {% if i.algorithms == 'BLOWFISH' or i.algorithms == 'AES-256' %}
    <input type="text" name="key" required="True" placeholder="Enter the Secret Key">
    {% else %}
    <input type="file" name="private_key" required/>
    {% endif %}
    <input type="submit" id="redirect" name="decrypt" value="Download">
    {% endfor %}
</form>

View.py:-

def DecryptFile(request):
    if 'isloggedin' in request.session:
        if request.method == 'POST':
            id = request.POST.get('id')

            # instance = DecryptRequestModel.objects.get(id=id)
            form = DecryptRequestForm(request.POST,request.FILES)

            if form.is_valid():
                algorithm = form.cleaned_data['algorithms']
                print(algorithm)
                form.save()

型号:

class DecryptRequestModel(models.Model):

    id = models.IntegerField(primary_key=True)
    file_name = models.CharField(max_length=200)
    algorithms = models.CharField(max_length=200)
    key = models.CharField(max_length=200)
    private_key = models.FileField(upload_to='UserUploads/Tempfile/')
    date_decrypted = models.DateField(auto_now_add=True, blank=True, null=True)
    # file_id = models.ForeignKey('UserFileUploadModel', on_delete=C)

    def __str__(self):
        return self.algorithms

    class Meta:
        db_table = "decryption"

class UserFileUploadModel(models.Model):

    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=200)
    email = models.CharField(max_length=200)

    class Meta:
    db_table = "userfiles"

表格:-

class DecryptRequestForm(forms.ModelForm):
    id = forms.IntegerField()
    email = forms.CharField(max_length=200)
    algorithms = forms.CharField(max_length=200,required=False)
    key = forms.CharField(max_length=200,required=False)
    private_key = forms.FileField(required=False)

    class Meta():
        model = DecryptRequestModel
        fields = ['id','email','algorithms','key','private_key']

0 个答案:

没有答案