Django如何在每次更新屏幕时添加新记录?而是更新现有记录



如何在每次更新屏幕时添加新记录?而是更新现有记录。?

这是模型。

class Dealer(models.Model):
city = models.CharField('City', max_length=30, blank=True, null=True)
contact_name = models.CharField('Contact name', max_length=250, blank=True, null=True)
dealer_id = models.CharField('dealer_id', max_length=50, primary_key=True)
dealership_name = models.CharField('Dealership name', max_length=100, blank=True, null=True)
dsr = models.CharField('DSR', max_length=50, blank=True, null=True)
email = models.EmailField('Email', blank=True, null=True)
fax = models.CharField('Fax', max_length=20, blank=True, null=True)
dealer_notes = models.TextField('notes', blank=True, null=True)
phone = models.CharField('Phone', max_length=20, blank=True, null=True)
rating = models.CharField('Rating', max_length=20, blank=True, null=True)
state = models.CharField('State', max_length=5, blank=True, null=True)
street = models.CharField('Street', max_length=60, blank=True, null=True)
zip = models.CharField('Zip', max_length=10, blank=True, null=True)
def __str__(self):
return self.dealer_id

class Activity(models.Model):    
dealer_id = models.ForeignKey(Dealer, on_delete=models.CASCADE)
activity_number = models.PositiveIntegerField(default=1)
date_created = models.DateField('date created', blank=True, null=True)
created_by = models.CharField('created_by', max_length=50, blank=True, null=True)
type = models.CharField('state', max_length=50, blank=True, null=True)
activity_notes = models.TextField(max_length=500, blank=True, null=True)
def __str__(self):
return f"{self.dealer_id} {self.activity_number}"

当它进入经销商备注页面时,它将从用户那里获得详细信息,以输入型号字段并保存。对于每个记录,可以有许多活动注释。但当我尝试添加一个新的笔记时,它会更新现有的笔记,我希望它能创建一个新记录。

def create_notes(request, dealer_id):
item, _ = Activity.objects.get_or_create(dealer_id_id=dealer_id)    
form = ActivityForm(instance=item)   
if request.method == 'POST':
form = ActivityForm(request.POST, instance=item)

if form.is_valid():
try:

form.save()
except:
pass
else:
return redirect('dealernotes/' + request.post.get('dealer_id_id'))
return render(request,
'dealernotes.html',
{'form': item,},
)
Can you help to create a new note every time? by activity number i should be able to update as well. 
urls:
path('dealernotes/<str:dealer_id>?/', views.update_notes,  name='dealernotes')
How do I fix this issue?

不要使用get_or_create,只使用create

item = Activity.objects.create(dealer_id_id=dealer_id) 

编辑2(刮擦编辑1(

在这里,尝试对其进行重组,使"活动"仅在您提交表单时创建。

  • 注意:我们正在更改模板,不要忘记这一点
def create_notes(request, dealer_id):
if request.method == 'POST':

form = ActivityForm(request.POST)

if form.is_valid():
try:
form.save()
except:
pass
else:
# debugging error:
print(form.errors.as_data())
return redirect('dealernotes/' + request.post.get('dealer_id_id'))
dealerObj = Dealer.objects.get(pk=dealer_id)
form = ActivityForm(initial={'dealer_id' : dealerObj})   
data = {
'form': form,
}
return render(request, 'dealernotes.html', data)

模板

  • 我们将用dealer_id替换PK输入,这样表单在帖子中是有效的
<form action="" method="post">
{% csrf_token %}
{{ form }}
<input type="submit" value="Submit">
</form>

最新更新