gpt4 book ai didi

python - 在 Django 模型中添加一对多关系

转载 作者:行者123 更新时间:2023-12-05 09:13:40 27 4
gpt4 key购买 nike

我的 Django-REST 应用程序中有两个模型。

ProjectRequestContactRequest

我想这样做,每个 Projectrequest 都包含一个引用的 Contactrequests 列表。

class ProjectRequest(models.Model):
project_name = models.CharField(max_length=50)
company_name = models.CharField(max_length=50)
#make array of technologiestechnologies = models.ArrayField(base_field=) (blank=True)
project_description = models.CharField(max_length=200)
project_type = models.CharField(max_length=30)
budget_estimation = models.IntegerField(
default=1000,
validators=[
MinValueValidator(1800),
MaxValueValidator(5000000)
])
#time_estimation = models.DateTimeField(default=None, blank=True, null=True)


class ContactRequest(models.Model):
topic = models.CharField(max_length=30)
description = models.CharField(max_length=200)
time = models.CharField(max_length=15)
project_request = models.ForeignKey(ProjectRequest,
on_delete=models.CASCADE)

到目前为止,我已经使用外键建立了关系,目前运行良好。但是我想扩展功能,因此 ProjectRequest 包含所有项目请求的列表。我尝试了几个不同的字段,但没有任何运气,我只能找到 ManyToManyOneToOne 的文档。如何实现?

最佳答案

有很多方法可以实现您想要的。为此,让我们添加一个 reverse relation在名为 contact_requests 的模型中:

project_request = models.ForeignKey(ProjectRequest, on_delete=models.CASCADE, related_name="contact_requests")

现在您可以使用 PrimaryKeyRelatedField显示附加到每个 ProjectRequestContactRequest 的主键。

class ProjectRequestSerializer(serializers.ModelSerializer):
contact_requests = serializers.PrimaryKeyRelatedField(many=True, read_only=True)

class Meta:
model = ProjectRequest
fields = ('contact_requests', 'company_name', ...) # other fields

或者如果您想要每个 contact_requests 的所有值,那么您可以使用 nested relationship像这样:

class ProjectRequestSerializer(serializers.ModelSerializer):
contact_requests = ContactRequestSerializer(many=True, read_only=True)

class Meta:
model = ProjectRequest
fields = ('contact_requests', 'company_name', ...) # and so on

关于python - 在 Django 模型中添加一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55687458/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com