2017-01-18 4 views
1

Ich bin Anfänger in der Programmierung, und ich versuche meine erste Django App.Wie kann ich Daten in zwei verschiedene Modelle einfügen?

Diesmal habe ich drei verschiedene Modelle, aber mit einem einzigen form im Moment, als ich Save schlug, möchte ich Daten auf diesem Formularmodell und in den anderen 2 Modellen speichern.

Also in meinem Display möchte ich die anderen beiden Modelle zu zeigen, was ich habe.

Ist das überhaupt möglich?

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> 

Grundsätzlich möchte ich name in Personinfo und Personame speichern, und ich möchte last_name in Personinfo und Personlastname speichern. So kann ich Personame und Personlastname in Vorlage anzeigen.

Kann mir bitte jemand helfen?

würde ich für Ihre Hilfe sehr freuen ... Dank

Antwort

2

Nun Ihre Modelle überhaupt keinen Sinn machen. Sie sollten wirklich ein Modell sein. Sie haben keine Beziehung zwischen den Modellen definiert. Dazu müssen Sie ein OneToOneField oder einen ForeignKey hinzufügen. Das bedeutet effektiv, dass Sie für jedes Datenelement eine zusätzliche Spalte haben. Völlig redundant.

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 

Das macht Ihr Leben mit einfacherer Codierung so viel einfacher.

+0

Ich brauche 3 diferent Modelle eine für das Formular und die anderen, die in Vorlagen angezeigt werden. Deshalb möchte ich in mehrere Tabellen aus einem einzigen Formular einfügen. – User100696

0

Ihre Modelle nicht Klasse Meta haben, müssen Sie den Tabellennamen in der Klasse meta definieren, wie:

class Meta: 
    managed = True 
    db_table = 'tableName' 

Dann u Sparfunktion in personform

außer Kraft setzen müssen
Verwandte Themen