Selesai: django menyimpan data kelas lain sambil menyimpan kelas

Apabila menyimpan kelas, Django menyimpan semua pembolehubah contoh dan kaedah kelas. Ini boleh menyebabkan masalah jika anda ingin menyimpan data kelas lain semasa menyimpan kelas.

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

s ea si er an d mor e re ada ble โ€ฆ . h tt p : // w iki . pyt hon . atau g/ moi n/ Py thon Deco rato rs #Wh at_ is _ a _ Deco rato r โ€ฆ tetapi kemungkinan besar akan berlaku pada hari ini ๐Ÿ™‚ Good l uck ! Bria n Karr bk arr @ bk arr consu lti ng .. com h ttp : // www . bk arr consu lti ng .. com

Bekerja dengan kelas

Dalam Django, anda bekerja dengan model untuk mencipta dan mengurus data anda. Model ialah perwakilan data dalam aplikasi anda. Model boleh menjadi ringkas atau kompleks, dan boleh mengandungi sebarang jenis data yang anda perlukan.

Untuk mencipta model dalam Django, anda menggunakan fungsi model() django. Fungsi ini mengambil dua hujah: nama model dan senarai medan yang membentuk model. Medan ditakrifkan sebagai pembolehubah Python yang mewakili kepingan data dalam model anda. Anda boleh menentukan medan sama ada sebagai rentetan atau sebagai objek.

Untuk mencipta contoh baharu model, anda menggunakan fungsi django create_model(). Fungsi ini mengambil nama model dan contoh objek FieldType sebagai argumennya. Objek FieldType mentakrifkan cara medan dalam model harus diisi. Terdapat tiga jenis objek FieldType: rentetan, integer dan terapung. Anda juga boleh mentakrifkan objek FieldType tersuai menggunakan fungsi field_type() django.

Sebaik sahaja anda telah mencipta model, anda boleh menggunakannya untuk menyimpan data dalam aplikasi anda. Untuk melakukan ini, anda menggunakan fungsi django save() untuk menulis data ke pangkalan data anda dan fungsi django save_all() untuk menulis data kepada semua model dalam aplikasi anda sekaligus. Anda juga boleh menggunakan fungsi django update() untuk mengemas kini data dalam pangkalan data anda berdasarkan perubahan yang dibuat pada model dalam aplikasi anda.

Related posts:

Tinggalkan komen