我在网上商店应用程序中有一个Orders模型,它具有一个自动递增的主键和一个自身的外键,因为可以将订单分为多个订单,但是必须保持与原始订单的关系。
class Order(models.Model):
ordernumber = models.AutoField(primary_key=True)
parent_order = models.ForeignKey('self', null=True, blank=True, related_name='child_orders')
# .. other fields not relevant here
我已经为管理站点注册了OrderAdmin类。对于详细视图,我已包含parent_order
在fieldsets
属性中。当然,默认情况下,这会在选择框中列出所有订单,但这不是所需的行为。相反,对于没有父订单的订单(即未与其他订单拆分;parent_order
为NULL /无)的订单不应该显示。对于已拆分的订单,这应仅显示单个父订单。
有一个相当新的ModelAdmin方法可用,formfield_for_foreignkey
它似乎很完美,因为可以在其中过滤查询集。想象一下,我们正在查看订单#11234的详细信息视图,该视图已从订单#11208中分离出来。代码如下
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == 'parent_order':
# kwargs["queryset"] = Order.objects.filter(child_orders__ordernumber__exact=11234)
return db_field.formfield(**kwargs)
return super(OrderAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
带注释的行在Python shell中运行时有效,返回单项查询集,其中包含#11234的订单#11208和可能已经从中拆分的所有其他订单。
当然,我们不能在那里硬编码订单号。我们需要引用ordernumber
要查看其详细信息页面的订单实例的字段。像这样:
kwargs["queryset"] = Order.objects.filter(child_orders__ordernumber__exact=?????)
我没有找到替代?????的工作方法 并引用了“当前” Order实例,我对此进行了深入研究。self内部formfield_for_foreignkey是指ModelAdmin实例,尽管它确实具有model属性,但不是订单模型实例(它是ModelBase引用; self.model()返回一个实例,但其订单号为None)。
一种解决方案可能是从request.path(/ admin / orders / order / 11234 /)中提取订单号,但这确实很丑。我真的希望有更好的方法。
我认为你可能需要以稍微不同的方式来实现此目的-通过修改ModelForm而不是admin类。像这样:
class OrderForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(OrderForm, self).__init__(*args, **kwargs)
self.fields['parent_order'].queryset = Order.objects.filter(
child_orders__ordernumber__exact=self.instance.pk)
class OrderAdmin(admin.ModelAdmin):
form = OrderForm
问题内容: 是否可以在Scrapy管道中访问django模型,以便将已抓取的数据直接保存到模型中? 我已经看到了,但是我真的不知道如何设置它吗? 问题答案: 如果还有其他人遇到相同的问题,这就是我解决的方法。 我将其添加到我的scrapy settings.py文件中: 注意:上面的路径是到你的django项目文件夹,而不是settings.py文件。 现在,你将可以在scrapy项目中完全访问d
问题内容: 如果我在Django中设置会话变量,例如: 有什么方法可以从模板中访问它,还是必须从视图中检索它,然后将其传递给模板? 询问是因为我想在模板中访问大约10个小会话变量,然后将所有10个从视图传递到模板可能会有些混乱。 (我必须使用会话变量,因为它是HttpResponseRedirect,但是出于我的目的,将变量存储在数据库中是过大的。) 那么-有什么方法可以直接在模板中获取会话变量?
问题内容: 我是Python和Django的新手。我目前正在探索使用Scrapy抓取网站并将数据保存到Django数据库。我的目标是根据用户提供的域来运行蜘蛛。 我写了一个Spider来提取我需要的数据,并在调用时将其正确存储在json文件中 如刮板教程中所述。 我现在的目标是使Spider成功地将数据保存到Django数据库,然后根据用户输入来使Spider运行。 我知道与此主题相关的帖子很多,
问题内容: 我的视图模型中包含以下模型 如何从Javascript访问上述属性之一? 我尝试了这个,但是我得到了“未定义” 问题答案: 您可以通过以下操作将整个服务器端模型转换为Javascript对象: 在您的情况下,如果只需要FloorPlanSettings对象,则只需传递方法that属性:
在本节中,您将创建一个新的MoviesController类,并在这个Controller类里编写代码来取得电影数据,并使用视图模板将数据展示在浏览器里。 在开始下一步前,先Build一下应用程序(生成应用程序)(确保应用程序编译没有问题) 在解决方案上,用鼠标右键单击Controller文件夹,点击新增,再选择Controller。 在Scaffold新增对话框,选择MVC 5 Controll
问题内容: 我希望通过模板访问中的一些内容,但是我不知道该怎么做。我已经试过了 但这似乎不起作用。可能吗? 问题答案: 如果你使用django的内置通用视图或在快捷方式函数中传递上下文实例关键字参数,则Django提供对模板的某些经常使用的设置常量的访问,例如和某些语言设置。这是每种情况的示例: 这些视图都将具有几个常用设置,例如可用于模板{{ MEDIA_URL }}等。 如果要在设置中寻找对其