Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Python: Django 3.2 relation tallennusongelma

giga [23.04.2021 13:41:48]

#

Voisiko tämä olla bugi, vai teenko jotain väärin?

Tyhjä django projekti ja vain tämä models.py sisältö on editoitua sekä django admin aktivoitu:

from django.db import models

class Tag(models.Model):
    name = models.CharField(max_length=150, verbose_name="Tag Name")

    def __str__(self):
        return '{}'.format(self.name)

class Post(models.Model):
    name = models.CharField(max_length=150, verbose_name="Post Name")
    tags = models.ManyToManyField(Tag, blank=True, related_name='posts')

    def __str__(self):
        return '{}'.format(self.name)

    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)
        tags = ['a','b','c','d','e']
        for tag in tags:
            dbtag, created = Tag.objects.get_or_create(name=tag)
            self.tags.add(dbtag)
        super().save(*args, **kwargs)
        print (self.tags.all())

Kun luodaan uusi post, sen pitäisi luoda samalla tagit: 'a','b','c','d','e' (jos niitä ei ole olemassa) sekä postin ja tagin välille relatiot.

Ongelma: koodi kyllä luo 'a','b','c','d','e' tagit, ja tallentaa ne tietokantaan. Samoin relatioat luodaan, koska ne näkyvät tuolla print komennolla:

<QuerySet [<Tag: a>, <Tag: b>, <Tag: c>, <Tag: d>, <Tag: e>]>

Mutta jostain syystä relatiot ei tallenneta tietokantaan!!!

Eli Post luodaan ja tallenetaan tietokantaan, Tagit luodaan ja ne tallennetaan tietokantaan. Mutta relatiot luodaan, ne tulostuvat printilla, mutta eivät päädy tietokantaan. Miten tämä on mahdollista? Mitä teen väärin?

giga [23.04.2021 23:14:01]

#

Ok selvis...

Vaikuttaa Django bug...anteeksi ominaisuudelta.

Sama koodi toimii eri tavoilla shellissa ja django adminissa.

Jos luo Postin shellin kautta se tallentaa tagit ja relatiot.

Mutta jos luo Postin django adminin kautta, se ylikirjoittaa kaiken UI:n tyhjillä arvoilla. Kiva....

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta