我会尝试这样的:
1) 使用“DeliveryDate”左右的模型创建一个本地应用程序(例如delivery_date)。例如 localsite/delivery_date/models.py:
class DeliveryDate(models.Model):
product = models.ForeignKey(Product)
date = models.DateField()
order = models.ManyToManyField(Order)
class Meta:
unique_together = ("product", "date")
2) 最多 20 个现有订单的验证...嗯,好问题,也许最好的办法是在表单上进行?覆盖 clean 方法并检查此交货日期是否已经与 20 个订单相关联...可能类似于 localsite/delivery_date/forms.py
class DeliveryDateForm(forms.ModelForm):
class Meta:
model = DeliveryDate
def clean(self):
super(DeliveryDateForm, self).clean()
... check here the order_set count
...但也许表单不是执行此操作的最佳位置。
您可能还想自己隐藏和自动设置产品和订单的初始值,而用户只需要选择一个日期。
3) 关于 satchmo... 我会在产品添加到购物车后使用信号做出反应(在这种情况下有一个信号),并添加一个监听器,将用户重定向到他可以看到的视图选择此产品的日期。看看这里带有信号“cart_add_view”的例子:http://www.facebook.com/note.php?note_id=101466134049
也许 ajax 在这里是一个不错的选择。在您的页面中有一个隐藏的容器......在将产品添加到购物车后显示(仅当产品还没有与此订单/产品关联的 DeliveryDate 时),并要求用户选择一个日期。
这整件事都在监听器上:检查产品是否需要交货日期,如果需要,发送一个 ajax 响应以弹出窗口,并将表单与初始产品一起放入 repsonse-context并为隐藏字段排序。
要保存交货日期,您将需要另一个 ajax 视图。
嗯,这只是一个想法,我将如何尝试这样做;-) 当然,它可能需要在这里和那里进行调整。但希望它能进一步帮助您。
问候,
安德烈亚