我有一个User
模型,它生成了以下表格:
其中id从1
增加。
我已经在一个咒语中使用了我的系统,现在我想要更改某个用户实例的id
并从10000
开始。
在数据库中我无法更改,它会报告错误:
Cannot delete or update a parent row: a foreign key constraint fails (`qy`.`usermanage_user_groups`, CONSTRAINT `usermana_user_id_53f44f10_fk_qy_adm` FOREIGN KEY (`user_id`) REFERENCES `usermanage_user` (`id`))
是否可以更改id
?如果存在一些相关因素,我如何逐一解决,例如usermanage_user_groups
?
答案 0 :(得分:0)
id
字段是Django添加的自动主键字段,因为您没有提供primary_key=True
属性。
注意强>
现在,正如评论所说,您可能不应该更改该字段的行为,因为它可以保证整个数据的唯一性。有关详细信息,请参阅链接文档。
考虑到你了解到现在,在我的观察中你有两种可能性。
我认为首选解决方案
1)添加自定义AutoField并在10000
处启动,然后相应地进行更新。
黑客版
2)在数据库中添加id
为9999的用户。这将导致根据此新值自动递增id
字段。它不会填补它们之间的值。
答案 1 :(得分:0)
您可以在数据库中设置从10000开始的序列。也可以尝试通过db manager手动添加id为9999的用户。
答案 2 :(得分:0)
我有点理解您想要实现的目标,但是我不确定是否要在表中保留现有用户数据,包括user,usermanage_user,usermanage_user_groups;
意思是, 您是否只是要将现有用户的user_id从[1、2、3、4,...... 25]替换为[10000、10001、10002、10004,...... 10025] ?
1]如果是,那么操纵DB中的表以安全地更新所有引用表中的ID是一种方法。如果您共享架构结构/ django模型,那么我可以在此处提供更好的解决方案。
2]如果否,则可以简单地将AUTO_INCREMENT设置为10000,以便以下新添加的用户以10000+开始
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
public class WebAccessor {
public static void main(String[] args) {
WebDriver driver = new HtmlUnitDriver();
driver.get("https://portal.mcpsmd.org/public/");
// Find the text input element by its name
WebElement username = driver.findElement(By.id("fieldAccount"));
WebElement password = driver.findElement(By.id("fieldPassword"));
// Enter something to search for
username.sendKeys("hullo");
// WebElement submit = driver.findElement(By.name("btn-enter"));
// Check the title of the page
System.out.println("Page title is: " + driver.getTitle());
driver.quit();
}
}