Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.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
Django的ManyToManyField,提供更多国家信息_Django_Python 3.x_Django Models - Fatal编程技术网

Django的ManyToManyField,提供更多国家信息

Django的ManyToManyField,提供更多国家信息,django,python-3.x,django-models,Django,Python 3.x,Django Models,我正试图找出如何使用Django中的ManyToManyField添加附加信息。例如,此代码: class Animal(models.Model): # ... pass class Log(models.Model): animal = models.ManyToManyField(Animal) 如果我想创建一个Log对象,并选择Animal对象。然后我想在我的日志中包含更多信息,比如头发的颜色,以及动物对象的眼睛颜色(我不能在动物对象本身中添加这些内容) 然后

我正试图找出如何使用Django中的
ManyToManyField
添加附加信息。例如,此代码:

class Animal(models.Model):
    # ...
    pass

class Log(models.Model):
    animal = models.ManyToManyField(Animal)
如果我想创建一个
Log
对象,并选择
Animal
对象。然后我想在我的
日志
中包含更多信息,比如头发的颜色,以及
动物
对象的眼睛颜色(我不能在
动物
对象本身中添加这些内容)


然后我想再向Log对象添加另一个完全相同的对象。比如一只狐狸。所以我想为两个不同的狐狸添加两次动物对象到日志中。这些特征是相同的,但唯一的是头发颜色的一些轻微变化。如何做到这一点

如果要使用m2m字段,可以指定模型之间的贯穿模型,并可以携带附加信息,例如()。一些自定义功能可以使用通过模型提供的信号来完成。可以通过Log.animal.through访问它


但我认为你的设计很糟糕。更好的做法是在日志上使用没有反向关系的外键,并向post save添加信号,这将创建日志的创建实例并向其添加信息,并将fk设置为动物的创建实例

如果要使用m2m字段,可以指定模型之间的贯穿模型,并可以携带附加信息,例如()。一些自定义功能可以使用通过模型提供的信号来完成。可以通过Log.animal.through访问它


但我认为你的设计很糟糕。更好的做法是在日志上使用没有反向关系的外键,并向post save添加信号,这将创建日志的创建实例并向其添加信息,并将fk设置为动物的创建实例

django默认情况下创建第三个模型来处理多个关系,您可以通过使用覆盖此模型并将自定义字段添加到其中,如前所述,如下面代码所示使用它:

from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=128)

    def __str__(self):
        return self.name

class Group(models.Model):
    name = models.CharField(max_length=128)
    members = models.ManyToManyField(Person, through='Membership')

    def __str__(self):
        return self.name

class Membership(models.Model):
    person = models.ForeignKey(Person, on_delete=models.CASCADE)
    group = models.ForeignKey(Group, on_delete=models.CASCADE)
    date_joined = models.DateField()
   invite_reason = models.CharField(max_length=64)

django默认情况下创建第三个模型来处理多个关系,您可以覆盖此模型,并通过使用将自定义字段添加到其中,如前所述,按如下代码使用它:

from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=128)

    def __str__(self):
        return self.name

class Group(models.Model):
    name = models.CharField(max_length=128)
    members = models.ManyToManyField(Person, through='Membership')

    def __str__(self):
        return self.name

class Membership(models.Model):
    person = models.ForeignKey(Person, on_delete=models.CASCADE)
    group = models.ForeignKey(Group, on_delete=models.CASCADE)
    date_joined = models.DateField()
   invite_reason = models.CharField(max_length=64)

我真的很想知道你是否需要一个m2m场地。这意味着一个动物可以有零个、一个或多个日志,而一个日志可以有零个、一个或多个动物。您可以在django m2m字段中指定通过模型。我真的想知道您是否需要一个m2m字段。这意味着一个动物可以有零个、一个或多个日志,一个日志可以有零个、一个或多个动物。您可以在django m2m字段中指定通过模型。