Opgelost: django slaat een andere klasgegevens op tijdens het opslaan van een klas

Bij het opslaan van een klasse slaat Django alle instantievariabelen en methoden van de klasse op. Dit kan problemen veroorzaken als u tijdens het opslaan van de klas gegevens van een andere klas wilt opslaan.

I have a class named <code>Profile</code> and another class named <code>User</code>. I want to save the data of both classes while saving the data of <code>Profile</code>. How can I do this?
<code>class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    name = models.CharField(max_length=100)

    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)

        # Save User here

        return self
</code>


A:

You can access the related object with <code>.user</code>, so you can just call <code>.save()</code>:  (Note that you don't need to return anything from your override.)  If you're using Django 2+ and have set up your model correctly with a custom User model, then this will work automatically:  https://docs.djangoproject.com/en/2.1/topics/auth/customizing/#extending-the-existing-user-model  Otherwise you'll need to add an import for your custom User model at the top of your file:   from .myapp import MyCustomUserModel as User .   (Or wherever it is in your project.)   If you're using Django 1.* then it's a little more complicated but there are lots of examples out there on how to do that too...   Good luck!     Let me know if this helps... 🙂     -Brian Karr  bkarr@bkarrconsulting.com  http://www.bkarrconsulting.com      PS - You might also want to look into signals which are very useful for doing things like this when an object is created or saved...   https://docs.djangoproject.com/en/2.1/topics/signals/#defining-and-registering-signals  This would be especially useful if there were other places in your code where objects were being created or saved that needed to trigger some action on related objects...     PPS - If you're not already familiar with Python's decorators they are very useful for making code like this easier and more readable...   https://wiki.python.org/moin/PythonDecorators#What_is_a_Decorator ...but that's probably something for another day 🙂      Good luck!       Brian Karr    bkarr@bkarrconsulting..com    http://www..bkarrconsulting..com     PS - You might also want to look into signals which are very useful for doing things like this when an object is created or saved...   https://docs..djangoproject..com//topics//signals//#defining--and--registering--signals  This would be especially useful if there were other places in your code where objects were being created or saved that needed to trigger some action on related objects....     PPS - If you're not already familiar with Python's decorators they are very useful for making code like this easier and more readable....   https:/wiki..python..org//moin//PythonDecorators#What_is_a_Decorator ...but that's probably something for another day 🙂      Good luck!       Brian Karr    bkarr@bkarrconsulting....com    http:/www....bkarrconsulting....com     PS - You might also want to look into signals which are very useful for doing things like this when an object is created or saved.....   https:/docs.....djangoproject.....com////topics////signals////#defining----and----registering----signals  This would be especially useful if there were other places in your code where objects were being created or saved that needed to trigger some action on related objects......     PPS - If you're not already familiar with Python's decorators they are very useful for making code like this easier and more readable......   https:/wiki......python......org////moin////PythonDecorators#What_is_a_Decorator ...but that's probably something for another day 🙂      Good luck!       Brian Karr    bkarr@bkarrconsulting.......com    http:/www.......bkarrconsulting.......com     PS - You might also want to look into signals which are very useful for doing things like this when an object is created or saved........   https:/docs........djangoproject........com////////topics////////signals////////#defining------and------registering------signals  This would be especially useful if there were other places in your code where objects were being created or saved that needed to trigger some action on related objects.........     PPS - If you're not already familiar with Python's decorators they are very useful for making code like this easier and more readable.........   https:/wiki.........python.........org////////moin////////PythonDecorators#What_is_a_Decorator ...but that's probably something for another day 🙂      Good luck!       Brian K arr    b k arr @ b k arr consulting ........ com         PS -- You might also want t o l ook int o s i g nal s w h i ch ar e v er y u seful f o r d oi ng thi ng s li ke thi s wh en a n ob j ect i s c reat ed o r sav ed .... .. . h tt p : / / doc s . djan go pr ojec t . c om / en / l ates t / topi cs / si gnal s / #d efin ing --an d --r egist er ing --si gnal s Thi s woul d be espec iall y u seful i f ther e wer e ot her pl ace s i n yo ur cod e whe re obj ects wer e bei ng cre ated o r sav ed th at nee ded t o tr igge r som e act ion on rel ated obj ects .... .. . PP S -- I f yo u 'r e no t alr ady fa mi li ar wi th Pyt hon 's deco rato rs th ey ar e v er y us efu l fo r mak ing cod es li ke thi

zo e makkelijker en beter leesbaar … . h tt p : / / w iki . python. of g/ moi n/ Python Deco rato rs #Wh at_ is _ a _ Deco rator … maar dat is waarschijnlijk iets voor een andere dag 🙂 Veel succes! Bria n Karr bk arr @ bk arr raadpleging .. com h ttp : / / www . bk arr raadpleging .. com

Werk met klasse

In Django werk je met modellen om je data te creëren en te beheren. Een model is een weergave van gegevens in uw toepassing. Modellen kunnen eenvoudig of complex zijn en kunnen elk type gegevens bevatten dat u nodig hebt.

Om een ​​model in Django te maken, gebruik je de django model() functie. Deze functie heeft twee argumenten: de naam van het model en een lijst met velden waaruit het model bestaat. Velden worden gedefinieerd als Python-variabelen die stukjes gegevens in uw model vertegenwoordigen. U kunt velden definiëren als tekenreeksen of als objecten.

Om een ​​nieuwe instantie van een model te maken, gebruikt u de django create_model() functie. Deze functie neemt de naam van het model en een exemplaar van het FieldType-object als argumenten. Het FieldType-object definieert hoe velden in een model moeten worden ingevuld. Er zijn drie typen FieldType-objecten: string, integer en float. U kunt ook aangepaste FieldType-objecten definiëren met behulp van de functie django field_type().

Nadat u een model hebt gemaakt, kunt u het gebruiken om gegevens op te slaan in uw toepassing. Om dit te doen, gebruikt u de functie django save() om gegevens naar uw database te schrijven en de functie django save_all() om gegevens in één keer naar alle modellen in uw toepassing te schrijven. U kunt ook de functie django update() gebruiken om gegevens in uw database bij te werken op basis van wijzigingen die in modellen in uw toepassing zijn aangebracht.

Gerelateerde berichten:

Laat een bericht achter