Django - 使用related_name'+'?

时间:2013-10-24 02:20:22

标签: python django

在Django1.5文档中,有一节关于related_name。最后一段是“如果您更喜欢Django不创建向后关系,请将related_name设置为'+'或以'+'结束。

例如,这将确保用户模型与此模型不具有向后关系:user = models.ForeignKey(User, related_name='+')。我什么时候应该使用“+”和related_name

2 个答案:

答案 0 :(得分:2)

也许在创建反向关系时会引发冲突。考虑你有一个抽象模型和所述模型的两个子类的情况:

private void SelectedProductData()
{
    string connstr = @"Data Source=JDT; User Id=admin; password=admin;";
    string cmdtxt = @"SELECT PRODUCT_ID,
                             PRODUCT_DESC,
                             UNIT_PRICE,
                             QUANTITY,
                             MEASUREMENT_UNIT,
                             MANUFACTORY
                      FROM WAREHOUSE
                        WHERE PRODUCT_ID = :P_Product_ID";

    using (OracleConnection conn = new OracleConnection(connstr))
    using (OracleCommand cmd = new OracleCommand(cmdtxt, conn))
    {
        conn.Open();

        cmd.CommandType = CommandType.Text;
        cmd.CommandText = cmdtxt;

        cmd.Parameters.Add(new OracleParameter(":P_Product_ID", OracleDbType.Int32)).Value = TB_Product_ID.Text;

        OracleDataReader oraReader = cmd.ExecuteReader();

        DataTable dt = new DataTable();

        dt.Load(oraReader);

        while (oraReader.Read())
        {
            DataGridViewRow dgvRow = new DataGridViewRow();
            dgvRow.Cells[0].Value = oraReader.GetValue(2);
            //dgvRow.Cells[0].Value = oraReader.GetString(2);
            //dgvRow.Cells[0].Value = oraReader.GetString(3);
            //dgvRow.Cells[0].Value = oraReader.GetString(4);

            DGV_INVOICE.Rows.Add(dgvRow);
        }
        MessageBox.Show("done");
    }
}

如果不使用 // MARK: - Table view data source override func numberOfSections(in tableView: UITableView) -> Int { // #warning Incomplete implementation, return the number of sections return 1 } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { // #warning Incomplete implementation, return the number of rows return self.posts.count } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! TableViewCell // Configure the cell... let post = self.posts[indexPath.row] cell.title.text = post.title?.utf8Data?.attributedString?.string if let imageUrl = post.imageUrl { cell.imgView?.downloadImage(from: imageUrl) } let myFormatter = DateFormatter() myFormatter.dateStyle = .none myFormatter.timeStyle = .short cell.pubDate.text = myFormatter.string(from: post.pubDate!) // What gives? return cell } } ,您将收到命名冲突,Django将拒绝启动。鉴于在这种情况下你实际上并不需要,所以跳过它是有意义的。

答案 1 :(得分:0)

来自Django docs的一种禁止向后关系的工具,其用词是:

  

如果您不希望Django不要创建向后关系,请将related_name设置为“ +”或以“ +”结尾。

以上答案是正确的,但我想让其他人更加清楚答案。