2014-12-07 3 views
0

В Django, если вы хотите создать модель, вы можете сделать это следующим образом:Джанго создания экземпляров модели без именованных аргументов

class SomeModel(models.Model): 
    a = models.CharField(max_length=10) 
    b = models.CharField(max_length=20) 
    c = models.CharField(max_length=30) 
    d = models.CharField(max_length=40) 
    e = models.CharField(max_length=50) 
    f = models.CharField(max_length=60) 

Теперь, если вы хотите создать экземпляр в оболочке, вы должны сделать :

> abcdef = SomeModel(a="stuff", b="stuff", c="stuff", d="stuff", e="stuff", f="stuff") 

Это очень раздражает, если вам нужно создавать экземпляры моделей с длинными именами свойств. Есть ли способ просто отправить такие аргументы, как вы, с обычным объектом Python (как и без того, чтобы не называть переменные и просто отправлять переменные в порядок)?

Как это:

> abcdef = SomeModel("stuff", "stuff", "stuff", "stuff", "stuff", "stuff") 

Как и в обычном классе Python в инициализации функции.

Спасибо :)

Вот моя текущая модель Python:

class School(models.Model): 
    urn = models.CharField(max_length=6) 
    name = models.CharField(max_length=100) 
    house = models.CharField(max_length=50) 
    street = models.CharField(max_length=50) 
    county = models.CharField(max_length=50) 
    postcode = models.CharField(max_length=8) 
    def __unicode__(self): 
     return str(
      'URN: ' + self.urn + ', ' + 
      'Name: ' + self.name + ', ' + 
      'House: ' + self.house + ', ' + 
      'Street: ' + self.street + ', ' + 
      'County: ' + self.county + ', ' + 
      'Postcode: ' + self.postcode + ', ' 
      ) 
+0

Вы попробовали? Модель Django * является * нормальным объектом Python. –

+0

Да, я попробовал. Первый аргумент - это первичный ключ и приводит к ошибке:/Я знаю, что его можно манипулировать обычным способом, но то, что я хочу изменить, - это функция __init__. – Pictraz

+0

Ах, хороший момент. Ну, а как просто пропустить «Нет» в качестве первого аргумента? Тогда pk останется как None и будет установлен как обычно при сохранении. –

ответ

1

Вы пробовали следующий код:

obj = SomeModel(None, "a_stuff", "b_stuff", "c_stuff", "d_stuff", "e_stuff", "f_stuff") 
obj.save() 

Надежда это помогает.

+0

Да. Но всякий раз, когда я пытаюсь отобразить объект, он дает ошибку [Bad Unicode Data] на дисплее в отличие от моей функции __unicode__. Я добавил свою модель в вопрос :) – Pictraz

+2

@Pictraz Я думаю, что у вас есть ошибка внутри метода '__unicode__'. Попробуйте удалить оболочку 'str'. –

+0

А я думаю, что вижу. Не приводит ли str() строку unicode? – Pictraz

0

вы можете создать экземпляр, выполнив

abcdef = SomeModel() 

С инстанцированием оленьей кожи прикоснуться к базе данных, вы можете присвоить значения позже а затем выполните .save().

+0

Я думаю, вы неправильно поняли вопрос ха-ха. Я не знаю, как отправить аргументы следующим образом: > abcdef = SomeModel («материал», «материал», «материал», «материал», «материал», «материал») – Pictraz

Смежные вопросы