django中的管理员问题 [英] Issues with admin in django
问题描述
在我的订单模型中,有一个名为status的字段,它具有未处理和处理的选项。放置订单后,管理员可以更改其状态。我想在管理员更新状态时向用户发送电子邮件。
我已经做了一些研发,但没有找到任何告诉我的内容
我的模型:
class Order(models.Model):
...
....
........
status = models.IntegerField(_(Status),
choices = settings.SHOP_ORDER_STATUS_CHOICES,
default = settings.SHOP_ORDER_STATUS_CHOICES [0] [0])
objects = managers.OrderManager ()
#这些是存储在会话中的字段。它们被复制到
#中的setup()中的顺序,并从complete()中的会话中删除。
session_fields =(shipping_type,shipping_total,discount_total)
class Meta:
verbose_name = _(Order)
verbose_name_plural = _ 订单)
订单=(-id,)
def __unicode __(self):
返回#%s%s%s%(self.id ,self.billing_name(),self.time)
def billing_name(self):
return%s%s%(self.billing_detail_first_name,
self.billing_detail_last_name)
def setup(self,request):
self.key = request.session.session_key
self.user_id = request .user.id
for self.session_fields中的字段:
if request.session中的字段:
setattr(self,field,request.session [field])
self.total = self.item_total = request.cart.total_price()
如果self.shipping_total不是None:
self.shipping_total = Decimal(str(self.shippi ng_total))
self.total + = self.shipping_total
如果self.discount_total不是None:
self.total - = self.discount_total
self.save()#我们需要一个ID才能添加相关的项目。
for request.cart中的项目:
product_fields = [f.name for f in SelectedProduct._meta.fields]
item = dict([(f,getattr(item,f))for f in product_fields])
self.items.create(** item)
def complete(self,request):
self.save()#保存交易ID。
for self.session_fields中的字段
if request.session中的字段:
del request.session [field]
del request.session [order]
对于request.cart中的项目:
try:
variation = ProductVariation.objects.get(sku = item.sku)
除了ProductVariation.DoesNotExist:
pass
else :
variation.update_stock(item.quantity * -1)
variation.product.actions.purchased()
code = request.session.get('discount_code')
if代码:
DiscountCode.objects.active()。filter(code = code).update(
uses_remaining = F('uses_remaining') - 1)
request.cart.delete()
def detail_as_dict(self):
context = {}
for fieldset in(billing_detail,shipping_detail):
fields = [ f.verbose_name,getattr(sel f,f.name))for f in
self._meta.fields if f.name.startswith(fieldset)]
context [order_%s_fields%fieldset] = fields
return上下文
管理员:
pre>
class OrderAdmin(admin.ModelAdmin):
ordering =(status,-id)
list_display =(id,billing_name $$$$$$$$$$$$$$时间)
list_display_links =(id,billing_name)
search_fields =([id,status,transaction_id] +
billing_fields + shipping_fields)
date_hierarchy =time
radio_fields = {status:admin.HORIZONTAL}
inlines =(OrderItemInline,)
formfield_overrides = {MoneyField:{widget:MoneyWidget}}
fieldsets =(
(_(帐单明细),{fields:((tuple(bil (),
(_(运送细节),{fields:((tuple(shipping_fields),)}),
(无,{fields:(additional_instructions (shipping_total,
shipping_type),(discount_total,discount_code),
item_total,(total,status),transaction_id ,
)
admin.site.register(Order,OrderAdmin)
可以任何人请告诉我如何发送这封电子邮件?
您需要在 post_save
信号为模型。您的监听器(这是一种标准的Python方法)将检查哪些字段已更改,然后将该电子邮件发送给用户。
I am making a shopping cart using mezzanine and cartridge.
In my order model there is a field called status which has choices of unprocessed and processed. After an order is placed an admin can change their status. I want to send an email to the user whenever an admin updates the status.
I have done some R&D on it but I didn't find anything which tells me how to send an email on change of status.
My model:
class Order(models.Model):
...
....
........
status = models.IntegerField(_("Status"),
choices=settings.SHOP_ORDER_STATUS_CHOICES,
default=settings.SHOP_ORDER_STATUS_CHOICES[0][0])
objects = managers.OrderManager()
# These are fields that are stored in the session. They're copied to
# the order in setup() and removed from the session in complete().
session_fields = ("shipping_type", "shipping_total", "discount_total")
class Meta:
verbose_name = _("Order")
verbose_name_plural = _("Orders")
ordering = ("-id",)
def __unicode__(self):
return "#%s %s %s" % (self.id, self.billing_name(), self.time)
def billing_name(self):
return "%s %s" % (self.billing_detail_first_name,
self.billing_detail_last_name)
def setup(self, request):
self.key = request.session.session_key
self.user_id = request.user.id
for field in self.session_fields:
if field in request.session:
setattr(self, field, request.session[field])
self.total = self.item_total = request.cart.total_price()
if self.shipping_total is not None:
self.shipping_total = Decimal(str(self.shipping_total))
self.total += self.shipping_total
if self.discount_total is not None:
self.total -= self.discount_total
self.save() # We need an ID before we can add related items.
for item in request.cart:
product_fields = [f.name for f in SelectedProduct._meta.fields]
item = dict([(f, getattr(item, f)) for f in product_fields])
self.items.create(**item)
def complete(self, request):
self.save() # Save the transaction ID.
for field in self.session_fields:
if field in request.session:
del request.session[field]
del request.session["order"]
for item in request.cart:
try:
variation = ProductVariation.objects.get(sku=item.sku)
except ProductVariation.DoesNotExist:
pass
else:
variation.update_stock(item.quantity * -1)
variation.product.actions.purchased()
code = request.session.get('discount_code')
if code:
DiscountCode.objects.active().filter(code=code).update(
uses_remaining=F('uses_remaining') - 1)
request.cart.delete()
def details_as_dict(self):
context = {}
for fieldset in ("billing_detail", "shipping_detail"):
fields = [(f.verbose_name, getattr(self, f.name)) for f in
self._meta.fields if f.name.startswith(fieldset)]
context["order_%s_fields" % fieldset] = fields
return context
Admin:
class OrderAdmin(admin.ModelAdmin):
ordering = ("status", "-id")
list_display = ("id", "billing_name", "total", "time", "status",
"transaction_id", "invoice")
list_editable = ("status",)
list_filter = ("status", "time")
list_display_links = ("id", "billing_name",)
search_fields = (["id", "status", "transaction_id"] +
billing_fields + shipping_fields)
date_hierarchy = "time"
radio_fields = {"status": admin.HORIZONTAL}
inlines = (OrderItemInline,)
formfield_overrides = {MoneyField: {"widget": MoneyWidget}}
fieldsets = (
(_("Billing details"), {"fields": (tuple(billing_fields),)}),
(_("Shipping details"), {"fields": (tuple(shipping_fields),)}),
(None, {"fields": ("additional_instructions", ("shipping_total",
"shipping_type"), ("discount_total", "discount_code"),
"item_total", ("total", "status"), "transaction_id")}),
)
admin.site.register(Order, OrderAdmin)
Can anybody please tell me how I can send this email?
You need to add a listener on the post_save
signal for the model. Your listener (which is a standard Python method) will check what field has changed and then dispatch the email to the user.
这篇关于django中的管理员问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!