Referência de objetos relacionados¶
This document describes extra methods available on managers when used in a one-to-many or many-to-many related context. This happens in two cases:
The “other side” of a
ForeignKeyrelation. That is:class Reporter(models.Model): ... class Article(models.Model): reporter = models.ForeignKey(Reporter)
In the above example, the methods below will be available on the manager
reporter.article_set.Both sides of a
ManyToManyFieldrelation:class Topping(models.Model): ... class Pizza(models.Model): toppings = models.ManyToManyField(Topping)
In this example, the methods below will be available both on
topping.pizza_setand onpizza.toppings.
-
QuerySet.add(obj1[, obj2, ...])¶ Adiciona objeto model especificado para o conjunto de objetos relacionados.
Exemplo:
>>> b = Blog.objects.get(id=1) >>> e = Entry.objects.get(id=234) >>> b.entry_set.add(e) # Associa Entry e com Blog b.
-
QuerySet.create(**kwargs)¶ Cria um novo objeto, o salva e o coloca no conjunto de objetos relacionados. Retorna o novo objeto criado:
>>> b = Blog.objects.get(id=1) >>> e = b.entry_set.create( ... headline='Hello', ... body_text='Hi', ... pub_date=datetime.date(2005, 1, 1) ... ) # Não necessita chamar e.save() neste ponto -- ele já está salvo.
Isto é equivalente (mas muito mais simples):
>>> b = Blog.objects.get(id=1) >>> e = Entry( .... blog=b, .... headline='Hello', .... body_text='Hi', .... pub_date=datetime.date(2005, 1, 1) .... ) >>> e.save(force_insert=True)
Note que não há necessidade de especificar argumentos nomeados para o model que define a realação. No exemplo acima, nós não passamos o parâmetro
blogparacreate(). O Django descobre que o novo campoblogdo objetoEntrydeve ser definido comob.
-
QuerySet.remove(obj1[, obj2, ...])¶ Remove o model especificado do conjunto de objetos relacionados:
>>> b = Blog.objects.get(id=1) >>> e = Entry.objects.get(id=234) >>> b.entry_set.remove(e) # Disassocia Entry e de Blog b.
A fim de previnir inconsistências no banco de dados, este método somente existe em objetos
ForeignKeyondenull=True. Se o campo relacionado não puder serNone(NULL), então o objeto não pode ser removido de uma relação sem ser adicionado em outra. No exemplo acima, removendoedeb.entry_set()é equivalente a fazere.blog = None, e por isso oForeignKeyblognão temnull=True, isto é inválido.
-
QuerySet.clear()¶ Revove todos os objetos de um conjunto de objetos relacionados:
>>> b = Blog.objects.get(id=1) >>> b.entry_set.clear()
Note que isto não deleta os objetos relacionados – somente os desassocia.
Assim como
remove(),clear()é somente disponível emForeignKeys ondenull=True.