Django模型id变成了一个元组

时间:2016-09-14 05:42:11

标签: django django-models

我的模特有一个超级课程如下:

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()参数必须是字符串,类字节对象或数字,而不是' tuple'。

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

有什么想法吗?

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

1 个答案:

答案 0 :(得分:0)

这就是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

另请阅读此Writing a __init__ function to be used in django model