如何为一个用户分配几个对象

时间:2019-10-04 12:04:41

标签: python django

我想要一个带有对象(订单)列表的模板页面(另一个列表,用于另一个用户)。喜欢一对多的关系。我需要在哪里定义对象(订单)(例如,以id:order_id = 1和order_id = 3为例)分配给具有id = 1等的用户(驱动程序)?

我试图创建Driver类,然后按这样的Class顺序设置属性驱动程序。

form.py

class OrderForm(forms.Form):

    telephone_regex =   RegexValidator(regex=r'^\+?1?\d{9,15}$', message="Phone number must be entered in the format: '+999999999'.")


    airport         =   forms.ChoiceField(choices=AIRPORT_CHOICES)                 ### Jeśli lotnisko jest celem podróży
    direction       =   forms.ChoiceField(choices=DIRECTION_CHOICES)                ## to pick_up < plane i odwrotnie!!!
    adress          =   forms.CharField()
    client          =   forms.CharField()
    telephone       =   forms.CharField(validators=[telephone_regex])
    flight_number   =   forms.CharField()
    plane           =   forms.DateTimeField(input_formats=['%Y-%m-%d'])
    pick_up         =   forms.DateTimeField(input_formats=['%Y-%m-%d'])
    gate            =   forms.CharField()
    company         =   forms.ChoiceField(choices=COMPANY_CHOICES)
    driver          =   forms.ChoiceField(choices=DRIVER_CHOICES)

models.py

class Driver(models.Model):
    name = models.CharField(max_length=30)
    tel  = models.CharField(max_length=17)

class Order(models.Model):

    telephone_regex = RegexValidator(regex=r'^\+?1?\d{9,15}$', 
message="Phone number must be entered in the format: 
    '+999999999'.")

    airport         =   models.CharField(max_length=10, choices=AIRPORT_CHOICES)
     direction       =   models.CharField(max_length=7, choices=DIRECTION_CHOICES)
    adress          =   models.CharField(max_length=100, null=False, blank=False)
client          =   models.CharField(max_length=50, null=False, blank=False)
telephone       =   models.CharField(validators=[telephone_regex], max_length=17, blank=False)
    flight_number   =   models.CharField(max_length=7)
    plane           =   models.DateTimeField(null=True)
    pick_up         =   models.DateTimeField(null=True)
    gate            =   models.CharField(max_length=10, null=True, blank=True)
    comapny         =   models.CharField(max_length=50, choices=COMPANY_CHOICES)
    driver          =   models.ForeignKey(Driver, on_delete=models.CASCADE)

order_list.html

{% extends "base.html" %}

{% block content %}

{% if user.is_authenticated %}
<h1>Hi {{ user.username }}! Have a good tips!</h1>
{% else %}
<h1>You have to login to see your orders list</h1>
{% endif %}
<table class="table table-dark">
    <thead>
      <tr>
        <th scope="col">#</th>
        <th scope="col">client</th>
        <th scope="col">telephone</th>
        <th scope="col">flight number</th>
      <th scope="col">airport</th>
      <th scope="col">direction</th>
      <th scope="col">adress</th>
      <th scope="col">gate</th>
      <th scope="col">plane</th>
      <th scope="col">pick up</th>

      </tr>
    </thead>
  {% for order in orders %}
    <tbody>
      <tr>
        <th scope="row">{{ order.id }}</th>
        <td>{{ order.client }}</td>
        <td>{{ order.telephone }}</td>
        <td>{{ order.flight_number }}</td>
      <td>{{ order.airport }}</td>
      <td>{{ order.direction }}</td>
      <td>{{ order.adress }}</td>
      <td>{{ order.gate }}</td>
      <td>{{ order.plane }}</td>
      <td>{{ order.pick_up }}</td>
      <td>{{ order.driver }}</td>
      </tr>
   </tbody>
   {% endfor %}
</table>


{% endblock %}

views.py

class OrderView(View):

    def get(self, request, id):
        orders = Order.objects.get(id=id)
        users = User.object.get(id=id)
        ctx = {
            'orders': orders,
            'users': users
        }
        return render(request, 'order.html', ctx)


class OrderListView(View):

    def get(self, request):
        form = OrderForm()
        orders = Order.objects.all()
        ctx = {'form': form, 'orders': orders}

        return render(request, 'orders/order_list.html', ctx)


class AddOrderView(View):

    def get(self, request):
        form = OrderForm()
        return render(request, 'orders/add_order.html', {'form': form})

    def post(self, request, *args, **kwargs):
        form = OrderForm(request.POST)
        if form.is_valid():
            order = Order.objects.create(airport=form.cleaned_data['airport'],
                                         direction=form.cleaned_data['direction'],
                                         adress=form.cleaned_data['adress'],
                                         client=form.cleaned_data['client'],
                                         telephone=form.cleaned_data['telephone'],
                                         flight_number=form.cleaned_data['flight_number'],
                                         plane=form.cleaned_data['plane'],
                                         pick_up=form.cleaned_data['pick_up'],
                                         gate=form.cleaned_data['gate'],
                                         driver=form.cleaned_data['driver'])

        return render(request, 'orders/add_order.html', {'form': form})

当我可以输入新订单并选择驱动程序时,我希望得到表格,但是我得到了:

http://dpaste.com/0PD363H

0 个答案:

没有答案