在Django1.5文档中,有一节关于related_name
。最后一段是“如果您更喜欢Django不创建向后关系,请将related_name
设置为'+'或以'+'结束。
例如,这将确保用户模型与此模型不具有向后关系:user = models.ForeignKey(User, related_name='+')
。我什么时候应该使用“+”和related_name
?
答案 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设置为“ +”或以“ +”结尾。
以上答案是正确的,但我想让其他人更加清楚答案。