尝试使用Django添加/更新非托管postgres表中的行时出现InvalidCursorName错误
我有3个模型,如下所示。所有这3个表都是postgres db中的现有表,因此已标记为managed=False。我正在尝试添加/更新TourData模型中的行。所有迁移都运行良好,没有任何错误。但每次我尝试访问生成表单的url以在TourData模型中添加/更新行时,都会出现异常尝试使用Django添加/更新非托管postgres表中的行时出现InvalidCursorName错误,django,django-models,django-forms,django-views,Django,Django Models,Django Forms,Django Views,我有3个模型,如下所示。所有这3个表都是postgres db中的现有表,因此已标记为managed=False。我正在尝试添加/更新TourData模型中的行。所有迁移都运行良好,没有任何错误。但每次我尝试访问生成表单的url以在TourData模型中添加/更新行时,都会出现异常游标“\u django\u curs\u 2876\u sync\u 1”不存在。我无法理解这意味着什么。我不确定我使用的视图是否也是渲染表单的正确方法 我搜索了很多关于这个错误可能意味着什么,但是找不到关于如何解决
游标“\u django\u curs\u 2876\u sync\u 1”不存在。我无法理解这意味着什么。我不确定我使用的视图是否也是渲染表单的正确方法
我搜索了很多关于这个错误可能意味着什么,但是找不到关于如何解决它的很多信息。因此,向SO社区专家寻求帮助。我对Django相当缺乏经验,这是我第一次使用非托管模型。我正在生产中使用Django 3.1和Postgres 12。我还有一个多数据库设置,默认数据库也是本地机器中的postgres db
models.py:
class Client(models.Model):
firstname = models.TextField(blank=True, null=True)
lastname = models.TextField(blank=True, null=True)
created = models.DateTimeField(blank=True, null=True)
class Meta:
managed = False
db_table = 'client'
class TourSchedule(models.Model):
client = models.ForeignKey('Client', models.DO_NOTHING)
created_on = models.DateTimeField(blank=True, null=True)
dated = models.DateField()
timing = models.TimeField(blank=True, null=True)
tour_type = models.IntegerField()
class Meta:
managed = False
db_table = 'tour_schedule'
unique_together = (('client', 'dated'),)
verbose_name = 'Tour Schedule'
verbose_name_plural = 'Tour Schedule'
ordering = ('dated', 'timing', 'client')
class TourData(models.Model):
BED_CHOICES = (
("1", "1"),
("2", "2"),
("3", "3"),
("4", "4"),
)
BATH_CHOICES = (
("1", "1"),
("1.5", "1.5"),
("2", "2"),
("2.5", "2.5"),
("3", "3"),
("4", "4"),
)
tour = models.ForeignKey('TourSchedule', models.DO_NOTHING)
beds = models.CharField(max_length=5, choices=BED_CHOICES)
baths = models.CharField(max_length=5, choices=BATH_CHOICES)
class Meta:
managed = False
db_table = 'tour_data'
verbose_name = 'Tour Data'
verbose_name_plural = 'Tour Data'
ordering = ['-tour', 'pk']
forms.py:
class TourDataForm(forms.ModelForm):
class Meta:
model = TourData
fields = '__all__'
tour_data.html模板:
{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% block title %} Tours - Data {% endblock title %}
{% block content %}
<div class="container">
<form method="POST" enctype="multipart/form-data">
{% csrf_token %}
{{ form | crispy }}
<button class="btn btn-outline-success" type="submit">Update</button>
</form>
</div>
{% endblock content %}
@login_required
def tour_data(request, tour_pk):
try:
instance = TourData.objects.using('postgres').get(tour=tour_pk)
except:
instance = None
if instance:
form = TourDataForm(request.POST, instance=instance)
else:
initial_data = {
'tour': tour_pk
}
form = TourDataForm(request.POST, initial=initial_data)
if request.method == 'POST':
if form.is_valid():
obj = form.save(commit=False)
messages.success(request, f"""Tour data updated successfully.""")
obj.save(using='postgres')
else:
messages.error(request)
else:
form = ClientRatingForm(instance=instance)
return render(request, 'tours/tour_data.html', {'form': form})