Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试使用Django添加/更新非托管postgres表中的行时出现InvalidCursorName错误_Django_Django Models_Django Forms_Django Views - Fatal编程技术网

尝试使用Django添加/更新非托管postgres表中的行时出现InvalidCursorName错误

尝试使用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”不存在。我无法理解这意味着什么。我不确定我使用的视图是否也是渲染表单的正确方法 我搜索了很多关于这个错误可能意味着什么,但是找不到关于如何解决

我有3个模型,如下所示。所有这3个表都是postgres db中的现有表,因此已标记为managed=False。我正在尝试添加/更新TourData模型中的行。所有迁移都运行良好,没有任何错误。但每次我尝试访问生成表单的url以在TourData模型中添加/更新行时,都会出现异常
游标“\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})