Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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 从另一个模型创建模型的多个实例?_Python_Django_Django Models - Fatal编程技术网

Python 从另一个模型创建模型的多个实例?

Python 从另一个模型创建模型的多个实例?,python,django,django-models,Python,Django,Django Models,如何从与外键相关的另一个模型创建模型的多个实例?示例代码如下: import itertools class Table(models.Model): color = models.CharField(max_length=100, blank=True, default='') def create_chairs(self, num, style): for _ in itertools.repeat(None,num): c = C

如何从与外键相关的另一个模型创建模型的多个实例?示例代码如下:

import itertools

class Table(models.Model):
    color = models.CharField(max_length=100, blank=True, default='')

    def create_chairs(self, num, style):
        for _ in itertools.repeat(None,num):
            c = Chair(style=style, table=self)


class Chair(models.Model):
    style = models.CharField(max_length=100, blank=True, default='')
    table = models.ForeignKey('Table')
尝试使用
t1=Table(color=“blue”,create_chairs={“style”:“natural”,“num”:4})
创建一个有4把椅子的Table对象。models.py是否应该包含这样的逻辑,还是应该全部从views.py完成?

create\u chairs()
是一种方法,而不是属性。您可以通过以下方式创建桌子和椅子:

t1 = Table(color="blue")
t1.create_chairs(4, 'natural')
是的,这种关系逻辑属于模型。顺便说一下,for语句的
可以替换为:

for _ in range(num):

现在存储所有这些家具是另一个步骤。创建每个实体后,您需要
put()
它们,以便它们在程序结束后存在

当前方法的一个问题是,您正在创建椅子,但没有将它们分配给任何对象,因此有些椅子没有桌子

Django提供了一个内置的方法来处理这个问题,因此您不需要特定的方法:

t1 = Table(color='Blue')

chairs = [Chair(style=y) for y in ['Natural']*4]
for chair in chairs:
    t1.chair_set.add(chair)
如果要使用单独的方法执行此操作,可以将其添加到任何类之外的
models.py
,最后:

def musical_chairs(table, num_chairs=4, style='Normal'):
    chairs = [Chair(style=s) for s in [style]*num_chairs]
    for chair in chairs:
        table.chair_set.add(chair)

正如他们所说。创建椅子是一种
方法
,而不是
模型属性
,那么您必须创建
模型的
实例/对象
,然后添加新的
椅子

t1 = Table.objects.create(color="blue")
t1.create_chairs(style='natural', num=4)

您必须更改方法,通过
create()
方法使
save()
生效

def create_chairs(self, num, style):
    for _ in itertools.repeat(None, num):
        Chair.objects.create(style=style, table=self)

什么是
create_chairs={“style”:“natural”,“num”:4}
?它是如何工作的?它应该是Table类的方法,所以我可以从我的Table对象调用它。我想用一个单独的方法来做,但为什么不能在我的Table类中呢?如果我加上它,它将如何被称为t1。音乐椅子(4)?我以前从未见过[style]*num_chairs]
中s的语法
[Chair(style=s)
,可以在文档中的某个地方链接它,这样我就可以了解它了?这是一个列表理解,也是编写Python时要掌握的核心内容。谷歌的帮助有很多来源。此外,您可以将其放在Table类中。不过,请确保将
表格
切换为
self
。如果将其放入表格类中,则会重新创建作为django一部分已经可用的功能。这是个坏主意,不要这样做。事实上,无论如何,你不应该把它作为一个单独的方法——它只是一个语法糖,而不是一个已经提供的方法,而且非常简洁。@Burnhan&limelights谢谢你的糖,我不太理解代码,但我将在这之后开始阅读列表理解。真的不知道该给谁颁奖?对于,Luan的很容易理解,但我从你那里学到了一些新的东西。这让我更进一步,但在调试器中,我得到了
完整性错误:myapp\u chair.table\u id可能不是null
。传入“self”引用是否有问题?解决了完整性错误,忘记在我的创建_的调用中指定num参数。我喜欢你简单的回答,因为它很容易理解。谢谢,太好了!我很高兴帮助你D