如何将外键(另一个模型)上的字段用作模型主键值的一部分

虚拟机

我是Django的新手,有时我不清楚应在myApp的哪个.py中编写解决方案和示例。

在我的models.py中,我有一个名为Project的模型和一个名为Order的模型。在管理部分(http://127.0.0.1:8000/admin/myApp/)中,我希望用户在创建新项目时键入项目编号。每个项目可以有多个订单。我希望订单主键由它所属的项目编号加上一个连续的编号组成。用户只能更改Oder主键的连续编号部分,而不能更改订单所属的项目编号。

例如对于project_number(primary key)= 951的Project,订单主键可以是951-1、951-2等

另一个具有project_number(primary key)= 1015的项目也可以具有订单1,2等,但是它们不会与项目951的订单冲突,因为它们将被标记为1015-1、1015-2等。

  1. 是否有可能在models.py中实现?
  2. 我将如何修改下面的order_number字段?

注意,我需要order_number字段才能从order_project字段中获取其project_number,在用户创建订单并将其与项目关联之前,我不知道order_project的确切值。

如果我的要求无法完成,请提出一种解决方法,并明确说明应在myApp的哪个.py中编写代码。

class Project(models.Model):
    project_number = models.IntegerField(unique=True,primary_key=True)
    project_name = models.CharField(max_length=400)

class Order(models.Model): 
    order_project = models.ForeignKey("Project", on_delete=models.CASCADE,verbose_name = "Project to which this order is associated",related_name= "orders_for_project")
    order_number = models.CharField(unique=True,primary_key=True,max_length = 10)

更新:

根据社区的建议,我的代码现在如下所示:

class Project(models.Model):
    project_number = models.IntegerField(unique=True,primary_key=True)
    project_name = models.CharField(max_length=400)

class Order(models.Model): 
    order_project = models.ForeignKey("Project", on_delete=models.CASCADE,verbose_name = "Project to which this order is associated",related_name= "orders_for_project")
    order_number = models.IntegerField(default=1,validators=[MinValueValidator(1)])
    class Meta:
        #TODO capture error and present it in human readable form 
        constraints = [ models.UniqueConstraint(fields= ['order_project','order_number'], name = 'unique_order_id'),]

    def __str__(self):
    return str(self.order_project.project_number) + ("-") + str(self.order_number) + (" : ") + str(self.order_description) 

我不完全理解为什么考虑到Project主键的值后无法形成我的Order主键,但这是一种解决方法

普罗斯特

您可以保持Order的主键独立于Product的PK,只需在order_project_id+order_number组合上设置唯一性约束即可

class Order(models.Model):
    order_project = models.ForeignKey("Project", on_delete=models.CASCADE,verbose_name = "Project to which this order is associated",related_name= "orders_for_project")
    order_number = models.IntegerField()

    class Meta:
        unique_together = ('order_project', 'order_number')

然后,如果要以{order_project_id}-{order_number}格式显示订单号,则可以使用运行时中的这两个字段来生成此值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

JPA如何使复合外键成为复合主键的一部分

如何将切片的一部分换成另一个

如何将模型移至Django网站管理员的另一部分

外键可以成为另一个表的组合主键的一部分吗?

如何在Oracle SQL中更新作为组合键的一部分并用作一个表的主键和其他表的外键的列

如何将一个UIViewController作为屏幕的一部分

如何比较一个python字典键和另一个字典键的一部分?类似于.contains()函数

如何将FOAF用作另一种本体的一部分?

保存模型并保存后获取,以用作外键来创建另一个模型

如何将网页的一部分“流式传输”到另一个窗口?

如何使Automapper映射另一个表的一部分的属性

如何将NumPy数组广播到另一个NumPy数组的一部分中?

Postgres如何将json的一部分(包括数组)提取到另一个JSON字段中?

批量将一个变量与另一个变量的一部分匹配

如何将线的一部分复制到另一个位置

将QTableWidget的一部分复制到另一个

如何从另一个路径中删除路径的一部分?

如何从另一个线程锁定方法的一部分?

将模型的集合仅绑定到另一个集合的一部分

Excel向导:如何创建一个公式,以将数字的一部分乘以一个单元格,另一部分乘以另一个

AWK-如何将变量用作另一个变量名称的一部分

仅当它是另一个模型的一部分时才将字段分配给模型

将 div 的一部分放在另一个下面

如何将图像从一个织物画布复制到另一个大织物画布的一部分?

如何从链接到另一个模型的外键访问模型字段?

如何使用从一个模型到另一个模型的多个字段作为外键?

如何将公式(文本)的结果作为另一个更大公式的一部分?

如何将json的一部分存储到另一个json文件中

外键索引可以是另一个索引的一部分还是应该是独立的?