两周前我被介绍给Python和Django,所以请耐心等待。我现在还应该说我正在使用Django 1.6和Python 3.3。
我的项目是一个订单管理系统。以下是它的工作原理:顾客进入商店并订购商品。该项目是一个订单,在员工向供应商下订单之前,该订单是空闲的。基本上,我有一个Order表,它收集customer_name,order_date,status等信息。然后我有一个EmployeeOrder表(1-1与Order的关系),它包含Order的所有元素,但也包含employee_placed和employee_order_date(几乎只是扩展订单)。
我尝试做的是编写代码,以便当用户通过放置EmployeeOrder选择正在履行哪个客户订单时,会显示该客户订单的信息。我现在并不关心它是如何显示的,弹出窗口工作得很好。我只是不知道该怎么做,我无法在任何地方遇到它。现在,下拉框只显示订单1,订单2等。用户不会记住哪些订单包含在哪个订单中,这就是我希望显示订单信息的原因。无论如何,到目前为止,这是我的代码:
models.py
class Order(models.Model):
customer_order_date = models.DateTimeField('Date helped')
customer_placed = models.ForeignKey(Customer)
employee_helped = models.ForeignKey(Employee)
STATUS_OF_ORDER = (
('IDLE', 'Not yet ordered'),
('SHIP', 'Awaiting delivery'),
('PICK', 'Ready for pickup'),
('UNAV', 'Unavailable for order'),
('BACK', 'Backordered - awaiting delivery'),
('CANC', 'Canceled by customer'),
('ARCH', 'Fulfilled - archived'),
)
status = models.CharField(max_length=4, choices=STATUS_OF_ORDER,
default='IDLE', editable=False)
paid = models.BooleanField('Paid', default=False)
ship = models.BooleanField('Ship', default=False)
comments = models.CharField(max_length=200, blank=True, null=True)
item = models.ManyToManyField(Item)
def __str__(self):
return 'Order ' + str(self.id)
def is_idle(self):
return self.status == 'IDLE'
class EmployeeOrder(models.Model):
order = models.OneToOneField(Order, primary_key=True,
limit_choices_to={'status': 'IDLE'})
employee_order_date = models.DateTimeField('Date ordered')
employee_placed = models.ForeignKey(Employee)
admin.py
class OrderAdmin(admin.ModelAdmin):
list_display = ('customer_order_date', 'customer_placed')
raw_id_fields = ('customer_placed', 'item')
class EmployeeOrderAdmin(admin.ModelAdmin):
list_display = ('employee_order_date', 'employee_placed')
感谢任何和所有的帮助,因为我仍然承认,当涉及到Python和Django时,我是一个完全的菜鸟!
答案 0 :(得分:1)
在我看来,您希望员工能够使用管理网站从客户订单创建员工订单。我认为这可以像为客户订单添加原始ID字段一样简单。也就是说,我认为您可以像这样更改EmployeeOrderAdmin:
class EmployeeOrderAdmin(admin.ModelAdmin):
list_display = ('employee_order_date', 'employee_placed')
raw_id_fields = ('order',)
现在,当员工创建员工订单时,他们将能够使用OrderAdmin页面查找他们想要的订单。
此外,假设您希望该弹出窗口以特定方式显示订单。在这种情况下,请记住,显示该弹出窗口的请求将包含一个名为pop
的附加GET参数。你可以:
class OrderAdmin(admin.ModelAdmin):
def queryset(self, request):
qs = super(ActiveOfferAdmin, self).queryset(request)
if request.GET.get('pop'):
return qs.order_by(...)
return qs