Đã giải quyết: django lưu dữ liệu lớp khác trong khi lưu lớp

Khi lưu một lớp, Django lưu tất cả các biến đối tượng và các phương thức của lớp. Điều này có thể gây ra sự cố nếu bạn muốn lưu dữ liệu lớp khác trong khi lưu lớp.

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 sier and more e adable … . h tt p : / / w iki . pyt hon . hoặc g/ moi n/ Py thon Deco rato rs #Wh at_ is _ a _ Deco rato r … but that at' it may be some e thi ng f or an ot her day 🙂 Thật may mắn! Bria n Karr bk arr @ bk arr consu lti ng .. com h ttp : / / www . bk arr consu lti ng.. com

Làm việc với lớp

Trong Django, bạn làm việc với các mô hình để tạo và quản lý dữ liệu của mình. Một mô hình là một đại diện của dữ liệu trong ứng dụng của bạn. Các mô hình có thể đơn giản hoặc phức tạp và có thể chứa bất kỳ loại dữ liệu nào bạn cần.

Để tạo một mô hình trong Django, bạn sử dụng hàm django model(). Hàm này nhận hai đối số: tên của mô hình và danh sách các trường tạo nên mô hình. Các trường được định nghĩa là các biến Python đại diện cho các phần dữ liệu trong mô hình của bạn. Bạn có thể xác định các trường dưới dạng chuỗi hoặc đối tượng.

Để tạo một phiên bản mới của một mô hình, bạn sử dụng hàm create_model() của django. Hàm này lấy tên của mô hình và một thể hiện của đối tượng FieldType làm đối số của nó. Đối tượng FieldType xác định cách điền các trường trong một mô hình. Có ba loại đối tượng FieldType: chuỗi, số nguyên và dấu phẩy. Bạn cũng có thể xác định các đối tượng FieldType tùy chỉnh bằng cách sử dụng hàm django field_type().

Khi bạn đã tạo một mô hình, bạn có thể sử dụng nó để lưu trữ dữ liệu trong ứng dụng của mình. Để làm điều này, bạn sử dụng hàm save() của django để ghi dữ liệu vào cơ sở dữ liệu của bạn và hàm django save_all() để ghi dữ liệu vào tất cả các mô hình trong ứng dụng của bạn cùng một lúc. Bạn cũng có thể sử dụng hàm update() của django để cập nhật dữ liệu trong cơ sở dữ liệu của mình dựa trên những thay đổi được thực hiện đối với các mô hình trong ứng dụng của bạn.

bài viết liên quan:

Để lại một bình luận