Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.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中的项目_Django_Django Models_Django Views_Django Forms_Django Templates - Fatal编程技术网

无法更新Django中的项目

无法更新Django中的项目,django,django-models,django-views,django-forms,django-templates,Django,Django Models,Django Views,Django Forms,Django Templates,我试图通过获取用户的详细信息并设置Bar实例来更新用户的Bar信息。但每次我单击仪表板上的链接时,它都会将我重定向到仪表板,如果它不是post方法,那么它就是我在else语句中使用的 view.py def UpdateUserBar(request): user = request.user.id bar = Bar.objects.get(user_id=user) form = UpdateBar(instance=bar) if request.metho

我试图通过获取用户的详细信息并设置Bar实例来更新用户的Bar信息。但每次我单击仪表板上的链接时,它都会将我重定向到仪表板,如果它不是post方法,那么它就是我在else语句中使用的

view.py

def UpdateUserBar(request):
    user = request.user.id
    bar = Bar.objects.get(user_id=user)
    form = UpdateBar(instance=bar)
    if request.method == 'POST':
        form = UpdateBar(request.POST,request.FILES, instance=bar)
        if form.is_valid():
            form.save()
            return redirect('/updatebar')
            messages.success(request, 'Bar Information Updated successfully')
        else:
            return redirect('/dashboard')
            messages.error(request, 'Only Post method is accepted')
    else:
        form = UpdateBar(instance=bar)
    context = {"form":form, "bar":bar}
    return render(request, "dashboard/super/landlord/update_bar.html", context)
forms.py

class UpdateBar(ModelForm):
    class Meta:
        model = Bar
        fields = '__all__'
models.py

class Bar(models.Model):

    status = (
            ("open", "open"),
            ("closed", "closed"),
            ("pending", "pending"),
        )

    user_id = models.OneToOneField(User, on_delete=models.CASCADE)
    name = models.CharField(max_length=50)
    address = models.CharField(max_length=100)
    opening_time = models.TimeField()
    closing_time = models.TimeField()
    status = models.CharField(choices=status, default="pending", max_length=14)
    image = models.ImageField(upload_to='images/bars', default='images/bars/default.jpg')

    def __str__(self):
        return self.name
updatebar.html

{% load i18n widget_tweaks %}
<form class="form-horizontal" role="form" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <div class="form-group">
        <label class="col-md-2 control-label">{{ form.name.label }}:</label>
        <div class="col-md-10">
            <input type="text" id="id_name" name="name" class="form-control" value="{{user.name}}" disabled>
        </div>
    </div>

    <div class="form-group">
        <label class="col-md-2 control-label">{{ form.user_id.label }}:</label>
        <div class="col-md-10">
            <input id="id_user_id" name="user_id" type="text" class="form-control" value="{{user_email}}" disabled>
        </div>
    </div>

    <div class="form-group">
        <label class="col-md-2 control-label">{{ form.address.label }}:</label>
        <div class="col-md-10">
            {{ form.address|attr:"class:form-control" }}
        </div>
    </div>

    <div class="form-group">
        <label class="col-md-2 control-label">{{ form.opening_time.label }}</label>
        <div class="col-md-10">
            {{ form.opening_time | attr:"class:form-control"  }}
        </div>
    </div>
    <div class="form-group">
        <label class="col-md-2 control-label">{{ form.closing_time.label }}</label>
        <div class="col-md-10">
            {{ form.closing_time | attr:"class:form-control"   }}
        </div>
    </div>
    <div class="form-group">
        <label class="col-md-2 control-label">{{ form.status.label }}</label>
        <div class="col-md-10">
            {{ form.status| attr:"class:form-control" }}
        </div>
    </div>
    <div class=" form-group ">
        <div class="input-group col-lg-12 ">
            <label class="col-md-2 control-label">{{ form.image.label}}</label>

            <div class="col-md-10">
                <div class="bootstrap-timepicker">
                {{ form.image| attr:"class:form-control" }}                                    </div>
                
            </div><!-- input-group -->                                        </div>
        </div>
            <div class="form-group">
                <div class="col-md-10">
                    <center><button class="btn btn-primary" type="submit">Update Bar Info</button></center>
                </div>
            </div>
        </form>
{%load i18n widget\u tweaks%}
{%csrf_令牌%}
{{form.name.label}}:
{{form.user_id.label}}:
{{form.address.label}}:
{{form.address}attr:“class:form-control”}
{{form.opening_time.label}
{{form.opening_time}attr:“class:form control”}
{{form.closing_time.label}
{form.closing|time|attr:“class:form control”}
{{form.status.label}
{{form.status}attr:“类:表单控件”}
{{form.image.label}
{form.image | attr:“类:表单控件”}
更新酒吧信息


每次我尝试访问访问URL时,它都会将我重定向到仪表板。

好吧,这里有几个小问题,首先如果您只想检索一个对象,请使用
get
而不是
过滤器
,因为如果找不到对象,它会给您一个
DoesNotExist
错误,使用
过滤器时
将返回一个空查询集,这将使错误更难跟踪

另外,在您的
Bar
模型中,我看到了
user\u id
字段,我假定该字段是
Bar
的所有者,您应该将其命名为
owner
user
,以提高可读性

以下是我将如何撰写此视图:

def update_user_bar(request): # use uppercase view names for class-based-views, if its a custom view, use regular variable names
    user = request.user # <------- change this 
    user_email = request.user.email
    bar = Bar.objects.get(user_id=user)
    if request.method == 'POST':
        form = UpdateBar(request.POST, request.FILES, instance=bar)
        if form.is_valid():
            form.save()
            return redirect('/updatebar')
            messages.success(request, 'Bar Information Updated successfully')
        else: # here is where your problem is, you need to fix your code indentation
            return redirect('/dashboard')
            messages.error(request, 'Only Post method is accepted')
    else: 
        form = UpdateBar(instance=bar) # assign your form here for better radability
    context = {"form":form, "user_email":user_email, "bar":bar}
    return render(request, "dashboard/super/landlord/update_bar.html", context)
def update_user_bar(请求):#对基于类的视图使用大写视图名称,如果是自定义视图,则使用常规变量名称

user=request.user#向我们显示您的html表单已更新,检查问题是否已使用GET request first呈现,并且您不允许它呈现i don't undersand very please,因为我是一名初学者。如果您错误地缩进上下文并在最后一条else语句下返回呈现,请不要理解。我不确定这是否正确。我已将views.py更改为您的方法。现在,它使用预先填充的信息呈现页面,但在更新字段并单击“更新”按钮后,它会将我发送到仪表板页面,而不执行任何保存操作。这意味着您的表单验证失败,试着调试我会回来的Shoryly我编辑了答案中的代码,试着检查一下你的表单html。看起来你有很多未关闭的div,表单结束标记远离了它的开始位置