Python Django如何建立家庭关系
我想知道我们如何在两个用户之间建立一种可以反向应用的关系。 目标是当通过Python Django如何建立家庭关系,python,django,Python,Django,我想知道我们如何在两个用户之间建立一种可以反向应用的关系。 目标是当通过django admin创建对象时,为了在两个用户之间添加关系,并在第二个用户中创建相反的关系,用户的性别对于反向连接非常重要 我曾尝试在创建对象时创建它的反面,但后来它崩溃了,因为它试图一次又一次地重新创建对象 型号.py SEX = ( ('m', 'Male'), ('f', 'Female'), ) class User(models.Model): first_name = models.C
django admin
创建对象时,为了在两个用户之间添加关系,并在第二个用户中创建相反的关系,用户的性别对于反向连接非常重要
我曾尝试在创建对象时创建它的反面,但后来它崩溃了,因为它试图一次又一次地重新创建对象
型号.py
SEX = (
('m', 'Male'),
('f', 'Female'),
)
class User(models.Model):
first_name = models.CharField(max_length=30, blank=False, null=False)
last_name = models.CharField(max_length=30, blank=False, null=False)
sex = models.CharField(max_length=1, choices=SEX)
def __str__(self):
return f"{self.first_name} {self.last_name}"
RELATIONS = (
('mother', 'Mother'),
('daughter', 'Daughter'),
('father', 'Father'),
('son', 'Son')
)
RELATIONS_REVERSE = {
'mother':{
'm':'son',
'f':'daughter'
},
'father':{
'm':'son',
'f':'daughter'
},
'son':{
'm':'father',
'f':'daughter'
},
'daughter':{
'm':'father',
'f':'mother'
}
}
class UserRelation(models.Model):
User_1 = models.ForeignKey(User, related_name="User_1", null=False, blank=False, on_delete=models.CASCADE)
User_2 = models.ForeignKey(User, related_name="User_2", null=False, blank=False,on_delete=models.CASCADE)
relation = models.CharField(max_length=30, choices=RELATIONS, null=False, blank=False)
#THIS DOES NOT WORK!
# def save(self):
# UserRelation.objects.create(
# User_1= self.User_2,
# User_2= self.User_1,
# relation= RELATIONS_REVERSE[str(self.relation)][self.User_2.sex]
# )
from django.contrib import admin
# Register your models here.
from .models import User, UserRelation
class UserRelationInline(admin.TabularInline):
model = UserRelation
fk_name = 'User_1'
class UserAdmin(admin.ModelAdmin):
inlines = [
UserRelationInline
]
admin.site.register(User, UserAdmin)
admin.py
SEX = (
('m', 'Male'),
('f', 'Female'),
)
class User(models.Model):
first_name = models.CharField(max_length=30, blank=False, null=False)
last_name = models.CharField(max_length=30, blank=False, null=False)
sex = models.CharField(max_length=1, choices=SEX)
def __str__(self):
return f"{self.first_name} {self.last_name}"
RELATIONS = (
('mother', 'Mother'),
('daughter', 'Daughter'),
('father', 'Father'),
('son', 'Son')
)
RELATIONS_REVERSE = {
'mother':{
'm':'son',
'f':'daughter'
},
'father':{
'm':'son',
'f':'daughter'
},
'son':{
'm':'father',
'f':'daughter'
},
'daughter':{
'm':'father',
'f':'mother'
}
}
class UserRelation(models.Model):
User_1 = models.ForeignKey(User, related_name="User_1", null=False, blank=False, on_delete=models.CASCADE)
User_2 = models.ForeignKey(User, related_name="User_2", null=False, blank=False,on_delete=models.CASCADE)
relation = models.CharField(max_length=30, choices=RELATIONS, null=False, blank=False)
#THIS DOES NOT WORK!
# def save(self):
# UserRelation.objects.create(
# User_1= self.User_2,
# User_2= self.User_1,
# relation= RELATIONS_REVERSE[str(self.relation)][self.User_2.sex]
# )
from django.contrib import admin
# Register your models here.
from .models import User, UserRelation
class UserRelationInline(admin.TabularInline):
model = UserRelation
fk_name = 'User_1'
class UserAdmin(admin.ModelAdmin):
inlines = [
UserRelationInline
]
admin.site.register(User, UserAdmin)
您可以按如下方式修改保存功能:
def save(self, first_save=True):
if first_save:
UserRelation(
User_1=self.User_2,
User_2=self.User_1,
relation=RELATIONS_REVERSE[str(self.relation)][self.User_2.sex]
).save(first_save=False)
super().save()