小编Cha*_*had的帖子

Django:你能说出相关字段是否已被预取而没有取出它?

我想知道Django是否有办法判断一个相关字段,特别是一对多关系中的"很多"部分是否已经通过,例如,prefetch_related()没有实际获取它?

所以,举个例子,假设我有这些模型:

class Question(Model):
  """Class that represents a question."""

class Answer(Model):
  """Class the represents an answer to a question."""
  question = ForeignKey('Question', related_name='answers')
Run Code Online (Sandbox Code Playgroud)

通常,要获得问题的答案数,最有效的方法是执行以下操作(因为Django文档说明count()如果您只需要计数则更有效):

# Note: "question" is an instance of class Question.
answer_count = question.answers.count()
Run Code Online (Sandbox Code Playgroud)

然而,在某些情况下,答案可能是通过prefetch_related()调用(或某种方式,例如先前已经遍历答案)获取的.所以在这种情况下,执行此操作会更有效(因为我们会跳过额外的计数查询):

# Answers were fetched via prefetch_related()
answer_count = len(question.answers.all())
Run Code Online (Sandbox Code Playgroud)

所以我真正想做的是:

if question.answers_have_been_prefetched:  # Does this exist?
  answer_count = len(question.answers.all())
else:
  answer_count = question.answers.count()
Run Code Online (Sandbox Code Playgroud)

如果重要的话,我正在使用Django 1.4.提前致谢.

编辑:添加澄清,这prefetch_related()不是获取答案的唯一方式.

python django

18
推荐指数
1
解决办法
4374
查看次数

Python defaultdict不插入缺失值

因此,defaultdict文档提到,如果缺少某个项,则default_factory" 返回的值将插入到密钥的字典中,并返回".这在大多数时候都很棒,但在这种情况下我真正想要的是返回值但插入defaultdict.

我想我可能是子类defaultdict并覆盖......我猜__missing__?不确定.最好的方法是什么?

提前致谢.

python collections defaultdict

15
推荐指数
1
解决办法
2271
查看次数

返回Django Queryset顶部的完全匹配

我有一个django模型,称为"用户",它存储一些关于人的基本信息,即名字和姓氏.我现在有在我的Django模型一个简单的搜索,其中,如果用户键入的第一个名字,查询集返回前10场比赛Django的,由有序的最后名称.

例如,目前,如果您搜索"Sam",您可能会得到以下结果:

  1. Sam Abbott
  2. 塞缪尔贝克
  3. 萨米罗杰斯
  4. 山姆西蒙斯

这个代码很简单:

User.objects.filter(Q(first__istartswith=token)).order_by('last')
Run Code Online (Sandbox Code Playgroud)

但是,我想改变它,以便首先返回任何确切的名字匹配,然后是其余的结果.因此,如果有人输入"Sam",结果应该是:

  1. Sam Abbott
  2. 山姆西蒙斯
  3. 塞缪尔贝克
  4. 萨米罗杰斯

(确切的名字首先匹配,按姓氏排序,然后是按姓氏排序的其余匹配).

我想把它变成2个查询集然后只是组合列表,但我想知道是否有可能在1个查询中执行此操作,理想情况下坚持使用基本的django查询集API(而不是编写一次性查询).有谁知道这样做的方法?

提前致谢.

python django django-queryset

8
推荐指数
1
解决办法
4086
查看次数

Swift 3:在NSAttributedString中获取子字符串的属性

我的一个控制器有一个NSAttributeString,其中有一个链接:

@IBOutlet var textView: UITextView!

// Below is extracted from viewDidLoad()
let linkStr = "Click <a href='http://google.com'>here</a> for good times."
let attributedText = try! NSAttributedString(
  data: linkStr.data(using: String.Encoding.unicode, allowLossyConversion: true)!,
  options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
  documentAttributes: nil)
textView.attributedText = attributedText
Run Code Online (Sandbox Code Playgroud)

我正在为控制器编写单元测试,我想验证是否在"here"文本上放置了正确的链接.(链接实际上是动态生成的,这就是我想测试它的原因).

无论如何,我显然可以得到这样的未归因文本:

let text = viewController.textView.attributedText.string
// text == "Click here for good times."
Run Code Online (Sandbox Code Playgroud)

我也可以通过这样的方式从"here"获取link属性:

let url = uviewController.textView.attributedText.attribute(
    "NSLink", at: 6, effectiveRange: nil)
// url == A URL object for http://google.com.
Run Code Online (Sandbox Code Playgroud)

问题是我不得不为at参数硬编码"6" .价值linkStr可能在未来发生变化,我不想每次都更新我的测试.对于这种情况,我们可以假设它将始终具有单词"here",并且链接附加到该单词.

所以我想要做的是找到"here"这个词所在的字符linkStr,并将该值传递给 …

range nsattributedstring swift

6
推荐指数
1
解决办法
2342
查看次数

Swift:如何加载单元测试UIWebView?

我的应用程序有一个基本的webview控制器来执行一些操作.除了UIWebView的包装外,故事板中的这个视图也不多.控制器本身具有各种公共功能,可以调用它们来加载webview中的页面,如下所示:

class WebViewController: UIViewController, UIWebViewDelegate {

  // MARK: Properties

  @IBOutlet var webView: UIWebView!

  // MARK: UIViewController

  override func viewDidLoad() {
    super.viewDidLoad()
    webView.delegate = self
    loadHomePage()
  }

  // MARK: Public

  public func loadHomePage() {
    navigateWebView(to: HOME_PAGE)
  }

  public func loadSettingsPage() {
    navigateWebView(to: SETTINGS_PAGE)
  }

  public func loadSignOutPage() {
    navigateWebView(to: SIGN_OUT_PAGE)
  }

  // MARK: Private

  private func navigateWebView(to url: String) {
    let request = URLRequest(url: URL(string: url)!)
    webView.loadRequest(request)
  }
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写单元测试,以验证是否将正确的URL发送到webview的loadRequest函数.请注意,我实际上并不关心加载URL; 这只是一个单元测试,所以我真正想要测试的是,例如,loadSettingsPage将带有SETTINGS_PAGE URL的URLRequest发送到要加载的webview.

我试过这样的事情,没有成功:

_ = webViewController.view  // Calls viewDidLoad()   
XCTAssertEqual(webViewController.webView.request?.url?.absoluteString, HOME_PAGE)
Run Code Online (Sandbox Code Playgroud)

assertEqual的第一部分的值是nil. …

unit-testing uiwebview ios swift

5
推荐指数
0
解决办法
936
查看次数