2017-01-18 5 views
1

Я новичок в кодировании, и я пытаюсь использовать свое первое приложение Django.Как вставить данные в две разные модели?

На этот раз у меня есть три разные модели, но с одним form на момент, когда я ударил Save Я хочу сохранить данные на этой модели модели и в других моделях 2.

Итак, на моем дисплее я хочу зациклировать две другие модели, чтобы показать, что у меня есть.

Возможно ли это?

models.py

class Personame(models.Model): 
    name = models.CharField(max_length=128) 
    def __str__(self): 
     return self.name 

class Personlastname(models.Model): 
    last_name = models.CharField(max_length=128) 
    def __str__(self): 
     return self.last_name 


class Personinfo(models.Model): 
    personame = models.CharField(max_length=128) 
    personlastname = models.CharField(max_length=128) 
    address = models.TextField() 
    phone_number = models.CharField(max_length=128) 
    hobbies =models.CharField(max_length=128) 

    def __str__(self): 
     return self.personame 

forms.py:

class personform(forms.ModelForm): 
    personame = forms.CharField(label = "Name") 
    personlastname = forms.CharField(label = "Last Name") 
    class Meta: 
     model = Personinfo 
     fields = ["personame","personlastname","address","phone_number","hobbies"] 

views.py:

def index(request): 
    queryset = Personame.objects.all() 
    queryset2 = Personlastname.objects.all() 
    qs = chain(queryset,queryset2) 
    form = personform(request.POST or None) 
    context = { 
    "qs": qs, 
    "form":form, 
    } 
    if form.is_valid(): 
     instance = form.save() 
    return render(request, "index.html", context) 

index.html:

<form method="POST" action="">{% csrf_token %} 
{{ form.as_p }} 
<input type="submit" value="Save!" /> 
</form> 

      <table > 
      <tr> 
       <th>Name</th> 
       <th>Last Name</th> 

      </tr> 
      {% for item in qs %} 
      <tr> 
       <td>{{ item.name }}</td> 
       <td>{{ item.last_name }}</td> 
      </tr> 
      {% endfor %} 
      </table> 

В принципе я хочу сэкономить name в Personinfo и Personame, и я хочу сэкономить last_name в Personinfo и Personlastname. Поэтому я могу показать Personame и Personlastname в шаблоне.

Может ли кто-нибудь мне помочь?

Я был бы очень рад за вашу помощь ... Благодаря

ответ

2

Ну ваши модели не имеет никакого смысла вообще. Они действительно должны быть одной моделью. вы не определили каких-либо отношений между любыми моделями. Для этого вам нужно будет добавить OneToOneField или ForeignKey. Это эффективно означает, что у вас есть дополнительный столбец для каждого элемента данных. Полностью избыточно.

class Personinfo(models.Model): 
    name = models.CharField(max_length=128) 
    last_name = models.CharField(max_length=128) 
    address = models.TextField() 
    phone_number = models.CharField(max_length=128) 
    hobbies =models.CharField(max_length=128) 

    def __str__(self): 
     return self.personame 

Это делает вашу жизнь намного проще с более простым кодированием.

+0

мне нужно 3 модели Diferent , один для формы, а остальные - в шаблонах. Вот почему я хочу вставлять несколько таблиц из одной формы. – User100696

0

ваши модели не имеют класса Meta, необходимо определить имя таблицы в классе мета, как:

class Meta: 
    managed = True 
    db_table = 'tableName' 

Тогда и нужно переопределить функцию сохранения в personform

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