Отображение "информации" путем выбора внешнего ключа в django admin
Я был представлен Python и Django около двух недель назад, так что терпите меня. Я должен также сказать, что сейчас я использую Django 1.6 и Python 3.3.
Мой проект - система управления заказами. Вот как это работает: покупатель заходит в магазин и заказывает товар. Этот товар помещается в заказ, который простаивает, пока работник не разместит заказ у поставщика. По сути, у меня есть таблица Order, которая собирает информацию, такую как customer_name, order_date, status и т. Д. Затем у меня есть таблица EmployeeOrder (1-1 отношение к Order), которая содержит все элементы Order, но также принимает в себя employee_placed и employee_order_date (в значительной степени просто расширяет Order).
Я пытаюсь написать код, чтобы, когда пользователь выбирает, какой заказ клиента выполняется путем размещения 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!
1 ответ
Для меня это звучит так, будто вы хотите, чтобы сотрудник мог использовать сайт администратора для создания заказа сотрудника из заказа клиента. Я думаю, что это может быть так же просто, как добавить необработанное поле ID для заказа клиента. То есть я думаю, что вы можете просто изменить EmployeeOrderAdmin следующим образом:
class EmployeeOrderAdmin(admin.ModelAdmin):
list_display = ('employee_order_date', 'employee_placed')
raw_id_fields = ('order',)
Теперь, когда сотрудник создает заказ сотрудника, он сможет использовать страницу OrderAdmin, чтобы найти нужный заказ.
Кроме того, предположим, что вы хотите, чтобы это всплывающее окно отображало заказы определенным образом. В этом случае имейте в виду, что запросы на отображение этого всплывающего окна будут содержать дополнительный параметр GET, называемый pop
, Вы могли бы:
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