Django:当用户不开机自检时发送错误消息

时间:2019-04-24 21:10:05

标签: django post select error-handling

当用户决定不通过POST提交“购买机票”按钮时,我正在尝试发送错误消息。我不确定使用选择值和选项值是否冲突。当我在没有POST的情况下提交时,它会发送MultiValueDictKeyError 例外值:“地点”。

models.py

class User(models.Model):
    first_name=models.CharField(max_length=100)
    last_name=models.CharField(max_length=100)
    email=models.CharField(max_length=100)
    password=models.CharField(max_length=100)
    created_at=models.DateTimeField(auto_now_add=True)
    updated_at=models.DateTimeField(auto_now=True)

class Ticket(models.Model):
    venue=models.CharField(max_length=100)
    quantity=models.PositiveIntegerField()
    price=models.DecimalField(default=25.00, max_digits=5, decimal_places=2, null=True, blank=True)
    loop=models.CharField(max_length=100)
    purchaser = models.ForeignKey(User, related_name="purchases", on_delete=models.PROTECT)
    created_at=models.DateTimeField(auto_now_add=True)
    updated_at=models.DateTimeField(auto_now=True)

views.py

def add(request):
    if not 'user_id' in request.session:
        return redirect('/chrisgrafil')
    if request.method!='POST':
        return redirect ('/dashboard')
    error=False
    if len(request.POST['venue'])<1:
        messages.error(request, "Please select venue")
        error=True
    if len(request.POST['quantity'])<1:
        messages.error(request, "Please select quantity")
        error=True
    if len(request.POST['loop'])<1:
        messages.error(request, "Please select loop")
        error=True
    else:
        Ticket.objects.create(venue=request.POST['venue'], quantity=request.POST['quantity'], loop=request.POST['loop'], purchaser=User.objects.get(id=request.session['user_id']))
        return redirect ('/confirmation')

dashboard.html

<form action="/add" method="POST">
                    {% csrf_token %}
                    <div class="text-center">
                            {% if messages %}
                            {% for message in messages %}
                            <div class="alert alert-danger p-2 pb-3">
                                <a class="close font-weight-normal initialism" data-dismiss="alert" href="#"><samp>×</samp></a> 
                                {{message}}
                            </div>
                            {% endfor %}
                        {% endif %}
                        <label><strong>Location of Venue:</strong></label>
                        <select class="form-control" name="venue">
                            <option value="" selected disabled>Please select</option>
                            <option value="San Bernardino">San Bernardino</option>
                            <option value="Los Angeles">Los Angeles</option>
                            <option value="Riverside">Riverside</option>
                        </select>
                    <div class="form-group">
                        <label><strong>Quantity of tickets:</strong></label>
                        <select class="form-control" name="quantity">
                            <option value="" selected disabled>Please select</option>
                            <option value="1">1</option>
                            <option value="2">2</option>
                            <option value="3">3</option>
                            <option value="4">4</option>
                            <option value="5">5</option>
                            <option value="6">6</option>
                        </select>
                    </div>
                    <div class="form-group">
                        <label><strong>Hearing Loop:</strong></label>
                        <select class="form-control" name="loop">
                            <option value="" selected disabled>Please select</option>
                            <option value="Yes">Yes</option>
                            <option value="N/A">N/A</option>
                        </select>
                        <small id="hearingloop" class="form-text text-muted">Designed for hearing aid and cochlear implant users accessibility</small>
                    </div>
                    <button type="submit" value="/add" class="btn btn-dark">Buy Tickets</button>
                </form>

我能够成功进行POST,但是即使我在views.py中指定了该用户,如果用户不进行POST,也无法获取错误消息。

if the request.method!='POST':
return redirect ('/dashboard')

感谢您的反馈!

0 个答案:

没有答案