【问题标题】:How to extend django's default User in mongodb?如何在mongodb中扩展django的默认用户?
【发布时间】:2021-01-05 06:20:05
【问题描述】:

我正在使用 mongodb 作为数据库并尝试扩展 django 的内置用户模型。 这是我得到的错误:

django.core.exceptions.ValidationError: ['Field "auth.User.id" of model container:"<class \'django.contrib.auth.models.User\'>" cannot be of type "<class \'django.db.models.fields.AutoField\'>"']

这是我的models.py

from djongo import models
from django.contrib.auth.models import User


class Profile(models.Model):
    user = models.EmbeddedField(model_container=User)
    mobile = models.PositiveIntegerField()
    address = models.CharField(max_length=200)
    pincode = models.PositiveIntegerField()

【问题讨论】:

  • 首先,如果您想使用 MongoDB 作为数据库,profile 应该继承自 from mongoengine.document import Document,但我不确定您是否可以将用户定义为 django 模式中的嵌入字段。
  • @MaryamAbdoli, Profile 不应继承自 from mongoengine.document import Document。这里它继承自 djongo.Model 并且 djongo 应该照顾一切。
  • 另外使用EmbeddedField 不是一个好主意,因为它会复制数据库中的用户数据。只需将用户 id 保留在模型中并单独查询即可。
  • @suraj 你找到解决办法了吗?
  • @ShivamYadav 是的

标签: mongodb django-models pymongo mongoengine djongo


【解决方案1】:

按照文档中的定义很简单。

所以,首先,使用 djongo 模型作为 model_container,我想 User 模型是 Django 模型,而不是 djongo 模型。

第二件事,通过在下面给出的 Meta 类中定义来使您的 model_cotainer 模型抽象。

from djongo import models

class Blog(models.Model):
    name = models.CharField(max_length=100)

    class Meta:
        abstract = True

class Entry(models.Model):
    blog = models.EmbeddedField(
        model_container=Blog
    )    
    headline = models.CharField(max_length=255) 

参考:https://www.djongomapper.com/get-started/#embeddedfield

【讨论】:

    【解决方案2】:

    使用EmbeddedField 不是一个好主意,因为它会复制数据库中的用户数据。您将在 Users 集合中拥有一些用户,并且相同的数据将嵌入到 Profile 集合元素中。

    只需将用户id保留在模型中,单独查询即可:

    class Profile(models.Model):
        user_id = models.CharField() #or models.TextField()
        mobile = models.PositiveIntegerField()
        address = models.CharField(max_length=200)
        pincode = models.PositiveIntegerField()
    

    【讨论】:

      猜你喜欢
      • 2018-06-12
      • 2017-08-15
      • 1970-01-01
      • 1970-01-01
      • 2013-05-12
      • 1970-01-01
      • 2018-02-17
      • 1970-01-01
      • 2013-04-18
      相关资源
      最近更新 更多