2012-03-20 93 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()