User100696
User100696

Reputation: 707

How can I insert data in two different models?

I'm newbie in coding, and I'm trying my first Django app.

This time I have three different models, but with a single form at the momment when I hit Save I want to save data on that form model and in the others 2 models.

So in my display I want to loop the other two models to show what I have.

Is that even possible?

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>

Basically I want to save name in Personinfo and Personame, and I want to save last_name in Personinfo and Personlastname. So I can show Personame and Personlastname in template.

Can anyone help me please?

I would be very happy for your help... Thanks

Upvotes: 1

Views: 162

Answers (2)

Ahmed Elemam
Ahmed Elemam

Reputation: 416

your models don't have class Meta , need to define the table name in class meta like :

class Meta: 
   managed = True
   db_table = 'tableName'

Then u need to override save function in personform

Upvotes: 0

e4c5
e4c5

Reputation: 53734

Well your models don't make any sense at all. They really should be one model. you have not defined any relationship between any of the models. To do that you will have to add a OneToOneField or a ForeignKey. That effectively means you are having an extra column for each item of data. Totally 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

This makes your life so much easier with simpler coding.

Upvotes: 2

Related Questions