gpt4 book ai didi

python - MongoDB 的 EmbeddedField 中的 Django 外键

转载 作者:行者123 更新时间:2023-12-05 06:12:55 24 4
gpt4 key购买 nike

我在我的 Django 项目中为 MongoDB 使用 Djongo 引擎。

我有两张 table

# app/models.py
# My Main Table

class Questions(models.Model):
questionId = models.UUIDField(default=uuid.uuid4, editable=True, unique=True)
question = models.TextField()
answer = models.EmbeddedField(
model_container=Answers
)
date = models.DateTimeField(auto_now_add=True, blank=True)
User = models.ForeignKey(UserDetailTable,on_delete=models.CASCADE,related_name='userinfo')

# app/models.py
# This table needs to be Embedded in Questions Table

class Answers(models.Model):
answerId = models.UUIDField(default=uuid.uuid4, editable=True, unique=True)
answer = models.TextField()
date = models.DateTimeField(auto_now_add=True)
User = models.ForeignKey(UserDetailTable,on_delete=models.CASCADE)

class Meta:
abstract = True

我想将 Answers 嵌入到 Questions 表中。但是我收到了这个错误

django.core.exceptions.ValidationError: ['Field "App.Answers.User" of model container:"<class \'App.models.Answers\'>" cannot be of type "<class \'django.db.models.fields.related.ForeignKey\'>"']

我知道这个错误是因为我在 Answers 中使用了 User = models.ForeignKey(UserDetailTable,on_delete=models.CASCADE),它本身就是 上的 EmbeddedField >问题

我该如何解决这个错误?

由于不同用户对同一个问题会有多个答案,使用 ForeignKey 可以很容易地显示用户的信息及其答案。

我也看过 djongo 的文档,但找不到任何东西。

如有任何帮助,我们将不胜感激。

最佳答案

IMO 的解决方案是在 Answer 中使用昵称作为字段,并在需要时手动获取 User 对象(通过昵称)。我想问题在于 Mongo 中的反向关系实现 - 嵌入式字段没有唯一 ID,它们只是一些更大文档的一部分(具有 ID 并且可以使用此 ID 访问)。 EmbeddedField 中的 ForeignKey 被禁止,因为无法索引反向关系。

另一种解决方案是将 QuestionAnswer 集合分开,这些集合中的每个文档都有 ID,这样您就可以使用 ex。 ArrayReferenceField ( https://www.djongomapper.com/using-django-with-mongodb-array-reference-field/ ) 来引用它们。在这种情况下,Answer 中的 ForeignKey 应该被允许,因为能够使用其 ID 索引 Answer

关于python - MongoDB 的 EmbeddedField 中的 Django 外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63494891/

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