Django模型id变成了一个元组



我有一个超类为我的模型如下:

class BaseModel(models.Model):
    """ BaseClass vase aksare model ha """
    def __init__(self, *args, **kwargs):
        super(BaseModel, self).__init__(args, kwargs)
        print('******> base model __init__')
    status = models.IntegerField(default=1)
    is_deleted = models.BooleanField(default=False)
    create_user = models.ForeignKey(User, related_name="%(app_label)s_%(class)s_creator_related")
    create_date = models.DateTimeField()
    update_date = models.DateTimeField()
    update_user = models.ForeignKey(User, related_name="%(app_label)s_%(class)s_updater_related")
    class Meta:
        abstract = True
    def validate(self):
        print('^^^^^^^^^^^^^^^^^^^^^^^^^^^^base validation')

和我的配置文件模型如下:

class Profile(BaseModel):
    def __init__(self, *args, **kwargs):
        super(Profile, self).__init__(args, kwargs)
    """ User profile """
    user = models.OneToOneField(User, related_name='profile')
    mobile = models.CharField(max_length=25, null=True)
    firstname_en = models.CharField(max_length=500, null=True)
    lastname_en = models.CharField(max_length=500, null=True)
    gender = models.IntegerField(default=0)
    birth_date = models.DateTimeField(null=True)
    edu_bg = models.ForeignKey('Category', related_name="profile__edu_bg", null=True)
    region = models.ForeignKey('Category', related_name="profile__region", null=True)
    credit = models.DecimalField(default=0, decimal_places=6, max_digits=15)
    key = models.TextField(null=True)
    secret = models.TextField(null=True)

我有一个错误,当我想插入一个新的userProfile如下:

TypeError: int()参数必须是字符串、类字节对象或数字,而不是'元组'。

然后打印vars(userprofileObject),并意识到'id': ((), {}),但是,我没有设置它。当我在插入代码中删除__init__函数或将id设置为None时,问题解决了。

任何想法?

我需要这些__init__,也不想设置id=None在我的代码

这就是django模型的工作方式。你不应该改变他们的__init__方法。这就是为什么

您可能想要通过覆盖__init__方法来定制模型。但是,如果这样做,请注意不要更改调用签名,因为任何更改都可能阻止保存模型实例。与其重写__init__,不如尝试使用以下方法之一:

# Add a classmethod on the model class:
from django.db import models
class Book(models.Model):
    title = models.CharField(max_length=100)
    @classmethod
    def create(cls, title):
        book = cls(title=title)
        # do something with the book
        return book
book = Book.create("Pride and Prejudice")
源https://docs.djangoproject.com/en/1.10/ref/models/instances/django.db.models.Model

写一个__init__函数在django模型中使用

最新更新