2012-03-20 2 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

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

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() 
Смежные вопросы