Use double underscores and _set to connect operations between tables
First, the data table structure
from django.db import models
class UserProfile(models.Model):
user_info = models.OneToOneField('UserInfo',on_delete=None)
username = models.CharField(max_length=64)
password = models.CharField(max_length=64)
def __str__(self):
return self.username
class UserInfo(models.Model):
user_type_choice = (
( 0 , u ' normal user ' ),
( 1 , u ' advanced user ' ),
)
user_type = models.IntegerField(choices=user_type_choice)
name = models.CharField(max_length=32)
email = models.CharField(max_length=32)
address = models.CharField(max_length=128)
def __str__(self):
return self.name
class UserGroup(models.Model):
caption = models.CharField(max_length=64)
user_info = models.ManyToManyField('UserInfo')
def __str__(self):
return self.caption
class Host(models.Model):
hostname = models.CharField(max_length=64)
ip = models.GenericIPAddressField()
user_group = models.ForeignKey('UserGroup')
def __str__(self):
return self.hostname
2. One-to-one query
user_info_obj = models.UserInfo.objects.filter(id=1).first()
print(user_info_obj.user_type)
print(user_info_obj.get_user_type_display())
print ( user_info_obj . userprofile . password ) #Here userprofile is lowercase. because it's all lowercase in the database
user_info_obj = models.UserInfo.objects.filter(id=1).values('email', 'userprofile__username').first()
print(user_info_obj.keys())
print(user_info_obj.values())
Three, one-to-many query
Similar to one-to-one 1 , use __connection 2 for search conditions, use .connection when getting the value
Four, many-to-many operation