Python Django中两个模型之间的关系
我有两种型号-订单和费用。费用是与特定订单相对应的积垢清单。我如何在这两个模型之间建立这样的关系 models.py-订单Python Django中两个模型之间的关系,python,django,Python,Django,我有两种型号-订单和费用。费用是与特定订单相对应的积垢清单。我如何在这两个模型之间建立这样的关系 models.py-订单 class Order(models.Model): user = models.ForeignKey(User,on_delete=models.CASCADE,related_name="order",blank=True,null=True) client_name = models.CharField(max_length=100) eve
class Order(models.Model):
user = models.ForeignKey(User,on_delete=models.CASCADE,related_name="order",blank=True,null=True)
client_name = models.CharField(max_length=100)
event_name = models.CharField(max_length=100)
contact = models.CharField(max_length=15)
event_date = models.DateField(auto_now_add=False,auto_now=False)
expenses = models.IntegerField(default=0,null=True,blank=True)
Models.py-费用
class ProjectExpense(models.Model):
user = models.ForeignKey(User,on_delete=models.CASCADE,related_name="project_expense",null=True,blank=True)
order_id = models.IntegerField(default='0')
exp = models.CharField(max_length=100)
exp_desc = models.TextField(null=True,blank=True)
amount = models.IntegerField(default='0')
def __str__(self):
return self.exp
我尝试用当前订单分配字段订单ID。但是我如何才能通过当前订单。我猜您需要一个多人关系:一个订单可以有多个费用 为此,您可以从订单模型中删除expenses属性。 您需要修改ProjectExpense模型的order_id属性,如下所示(正如@Lambo已经注释的): 当您查询订单模型时,如果您要求相关费用,则相关费用将包括在内,反之亦然 对象在后端中的创建方式如下所示: 新秩序:
# input contains the data received from frontend
Order.objects.create(user_id=input.user_id,
client_name=input.client_name,
event_name=input.event_name,
contact=input.contact,
event_date=input.event_date)
新费用:
# input contains expense details received from frontend
ProjectExpense.objects.create(user_id=input.user_id,
order_id=input.order_id,
exp=input.exp,
exp_desc=input.exp_desc,
amount=input.amount)
编写
order\u id=
非常重要,尽管模型中的属性本身被称为order
谢谢大家为我提供答案!我正在查看的功能是GenericForeignKey。教程帮助我理解了它
与各自订单相关的费用处理方式与博客中的评论和帖子类似。您尝试过吗?order\u id=models.ForeignKey(order,on\u delete=models.CASCADE)。添加费用时,您需要更新订单中的费用字段谢谢您的评论!是的,但它会给出一个顺序列表,最终用户必须明确提到顺序。我只想动态添加。你想如何动态链接它?您需要从列表中选择订单,很抱歉,我没有提供必要的详细信息。这次我会澄清,订单列表包含所有订单。如果我点击一个特定的订单,它将被重定向到一个页面,其中包含有关该特定订单的完整详细信息。在该页面中,我有一个按钮来添加该特定订单的费用。当我单击添加费用时,这些费用列表必须分别添加到该特定订单中。谢谢您的回答!我相信这会有帮助的。但我猜,多通关系给出了一个订单ID列表。用户每次添加费用时都必须选择一项。每当我打开订单详细信息并添加费用时,我添加的所有费用都必须与特定订单相对应。@akajash我不确定我是否了解您的预期行为。是否要向单个订单添加新费用,以便此费用仅属于一个特定订单?为此,您需要向后端提供费用详细信息和订单id。只要只有一个id被传输到后端,用户如何选择订单并不重要。我猜这将是另一个问题,因为我们对你的前端一无所知。我不确定。很抱歉我没有提供必要的细节。这次我会澄清的,订单列表包含所有订单。如果我点击一个特定的订单,它将被重定向到一个页面,其中包含有关该特定订单的完整详细信息。在该页面中,我有一个按钮来添加该特定订单的费用。当我单击“添加费用”时,这些费用列表必须分别添加到该特定订单。然后我猜您知道该订单的id,因为您在该特定订单的页面上。此id需要传输到后端,新费用将链接到订单。完全正确!但是我不知道如何自动传递当前订单ID,而不必显式地键入订单ID。但是我有一个想法,订单ID包含在页面的URL中,我可以通过它获取它吗?URL:localhost:8000/order/22/details/
# input contains expense details received from frontend
ProjectExpense.objects.create(user_id=input.user_id,
order_id=input.order_id,
exp=input.exp,
exp_desc=input.exp_desc,
amount=input.amount)