2012-03-20 90 views
1

我想添加一个字段到相关数据库列的Django对象。如果在初始化模型之后设置属性,但是像往常一样,我试图让它以Django的方式工作,只需添加一个属性即可。Django模型字段与数据库列

class Stuff(models.Model): 
    id = fields.UUIDField(primary_key=True) 
    name = models.CharField(max_length=128) 
    enabled = models.BooleanField(default=False) 
    log_user = None 

这将工作没有任何问题。

stuff = Stuff() 
stuff.log_user = current_user 

这不

stuff = Stuff(log_user=current_user) 
TypeError: 'log_user' is an invalid keyword argument for this function 

有没有什么办法让现场的行为Django的方法是什么?

回答

1

构造器会工作,如果你这样做:

class Stuff(models.Model): 

    id = fields.UUIDField(primary_key=True) 
    name = models.CharField(max_length=128) 
    enabled = models.BooleanField(default=False) 
    log_user = None 

    def __init__(self, log_user=None, *args, **kwargs): 
     super(Stuff, self).__init__(*args, **kwargs) 
     self.log_user = log_user 
+0

完美运作。谢谢。只是希望在Django中有一个meta_field,所以我们不必跳过这些简单的事情。 – Dax 2012-03-20 15:31:36

1

这里需要ForeignKey

class Stuff(models.Model): 
    id = fields.UUIDField(primary_key=True) 
    name = models.CharField(max_length=128) 
    enabled = models.BooleanField(default=False) 
    log_user = models.ForeignKey('auth.User', blank=True, null=True) 
+0

不幸的是,这仍然会创建一个数据库列。 – Dax 2012-03-20 15:30:21

0
Django recommend to use as a Foreign key Concept: 

class Stuff(models.Model): 
    id = fields.UUIDField(primary_key=True) 
    name = models.CharField(max_length=128) 
    enabled = models.BooleanField(default=False) 
    log_user = models.ForeignKey('auth.User', blank=True, null=True) 

while saving your Data you can add log_user object: 
    Stuff = Stuff() 
    stuff.log_user = user 
    stuff.save()