Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django如何建立家庭关系_Python_Django - Fatal编程技术网

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()