标签: manytomanyfield

Django:有没有办法在与包含ManyToManyField的模型不同的应用程序中的ManyToManyField中使用"直通"模型?

可以说我有两个django应用程序:

  • 比赛 - 将处理比赛数据
  • 条目 - 将处理与参赛者进入比赛相关的功能

在竞赛应用程序中,我有一个代表竞赛部分的模型:

class Division(models.Model):
    competition = models.ForeignKey(Competition)
    discipline = models.CharField(max_length=1, choices=DISCIPLINE_CHOICES)
    age_group = models.ForeignKey(AgeGroup)
    participants = models.ManyToManyField(Competitor, through='Entry')
Run Code Online (Sandbox Code Playgroud)

我想把Entry模型放在条目应用程序中:

class Entry(models.Model):
    division = models.ForeignKey('Division')
    competitor = models.ForeignKey(Competitor)
    withdrawn = models.BooleanField(default=False)
Run Code Online (Sandbox Code Playgroud)

如何解决from ... import ...语句,以便它们有效?当我输入import语句时,例如from entries.models import Entry我从syncdb忽略这些应用程序的模型(因为导入是循环的)或当我删除其中一个或两个时,我得到验证错误:

错误:一个或多个模型没有验证:entries.entry:'division'与模型Division有关系,它没有安装或者是抽象的.competitions.division:'参与者'通过模型Entry指定m2m关系,该关系尚未安装

我理解为什么会发生这种情况,但我不知道如何更改它,以便它可以工作(不需要将Entry模型移动到竞赛应用程序中,我真的不想这样做).

python django django-models manytomanyfield django-apps

8
推荐指数
2
解决办法
4429
查看次数

如何检查django中多对多字段的类型?

如何检查django中多对多字段的类型?

我想这样做:

import django  
field.__class__ == django.db.models.fields.related.ManyRelatedManager
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为ManyRelatedManager找不到类.但是,如果我做field.__class__的输出是django.db.models.fields.related.ManyRelatedManager

为什么它指的是一个似乎不存在的类,我怎样才能将它带到工作中?

非常感谢您的帮助.

python django django-models manytomanyfield manyrelatedmanager

7
推荐指数
2
解决办法
5570
查看次数

Django manytomany字段,如何检查80%子集/匹配?

我有一个带烹饪食谱的Django数据库.我想查询所有拥有至少80%成分的用户来制作食谱.我该如何实现这一目标?

或者我如何查询缺少配方的1种成分的用户?

models.py

class ingredient(models.Model):
    id = models.AutoField("id",max_length = 100, primary_key=True)
    name=models.CharField("Ingredient", max_length=100)

    def __unicode__ (self):
        return self.name

class user(models.Model):
    id = models.AutoField("id",max_length = 100, primary_key=True
    ingredient = models.ManyToManyField(ingredient,blank=True)

    def __unicode__ (self):
        return str(self.id)

class recipe(models.Model):
    id = models.AutoField("id", max_length=100, primary_key=True)
    recipe_ingredient = models.ManyToManyField(ingredient,related_name='recipe_ingredient',blank=True)

    def __unicode__ (self):
        return self.id
Run Code Online (Sandbox Code Playgroud)

python django manytomanyfield

7
推荐指数
1
解决办法
122
查看次数

Django Rest Framework许多对很多领域都与自身相关

我有一个AngularJS项目,它通过Django Rest Framework(DRF)使用Django作为框架.

我已经创建了一个Group模型并为它设置了一个序列化器类,但是我现在要在该模型上建立一个名为的新字段,该字段related_groups将引用与主键数组相同的模型(Group).

我不知道是否可以在序列化程序中进行自引用,而且我不知道如何通过前端传递相关组,这可以由拥有该组的用户选择和选择.我希望该字段引用其他组行的主键,并遍历该组集合以建立相关的组关系.

class GroupSerializer(serializers.ModelSerializer):

class Meta:
    model = mod.Group
    fields = (
        'group_id',
        'group_name',
        'category',
        'related_groups',
    )
Run Code Online (Sandbox Code Playgroud)

表示似乎正是我想要的:

GroupSerializer():
    group_id = IntegerField(read_only=True)
    group_name = CharField(max_length=100)
    category = CharField(max_length=256, required=False
    related_groups = PrimaryKeyRelatedField(many=True, queryset=Group.objects.all(), required=False)
Run Code Online (Sandbox Code Playgroud)

并且模型表示如下:

class Group(models.Model):
    """
    Model definition of a Group. Groups are a collection of users (i.e.
    Contacts) that share access to a collection of objects (e.g. Shipments).
    """
    group_id = models.AutoField(primary_key=True)
    group_name = models.CharField(max_length=100)
    owner_id = models.ForeignKey('Owner', related_name='groups')
    category = models.CharField(max_length=256) …
Run Code Online (Sandbox Code Playgroud)

django serialization manytomanyfield angularjs django-rest-framework

7
推荐指数
1
解决办法
1201
查看次数

Django:在事务中保存多个ManyToMany字段

这是我的模型的代表:

class B(models.Model):
   """I'm a dummy model, so doesn't pay atention of what I do"""
   name = models.CharField(max_length=250)

class A(models.Model):
   name = models.CharField(max_length=250)
   many_b = models.ManyToManyField(B)
Run Code Online (Sandbox Code Playgroud)

现在,假设我有一个B对象列表.还有一个ABs 相关的对象.像这样的东西:

a = A.objects.get(id=1)
list_of_b = [B<name='B1'>,B<name='B2'>,B<name='B3'>,]
Run Code Online (Sandbox Code Playgroud)

我现在与他们联系的方式是这样的:

for b_object in list_of_b:
   a.many_b.add(b_object)
Run Code Online (Sandbox Code Playgroud)

有没有办法在单个事务中添加所有B对象?也许在一个方法中,例如:

a.many_b.addList(b) #This doesn't exist
Run Code Online (Sandbox Code Playgroud)

python django model manytomanyfield

6
推荐指数
1
解决办法
1561
查看次数

获取 objects.all() reverse() 或降序

在 Django 中,调用object.manytomany.all().reverse()及其等效模板 ,object.manytomany.all.reverse似乎不适用于多对多关系。

如何反转多对多关系的结果列表?

django many-to-many django-templates django-orm manytomanyfield

6
推荐指数
1
解决办法
1万
查看次数

Django测试:DatabaseError:没有用于ManyToManyField的这样的表

我为非常简单的博客应用程序编写了几个测试,但是当我运行测试时,多对多的关系失败了: ./manage.py test myblog

DatabaseError: no such table: myblog_post_tag
Run Code Online (Sandbox Code Playgroud)

然而当我这样做时./manage.py sql myblog:

BEGIN;
CREATE TABLE "myblog_tag" (
    "id" integer NOT NULL PRIMARY KEY,
    "name" varchar(50) NOT NULL
)
;
CREATE TABLE "myblog_post_tag" (
    "id" integer NOT NULL PRIMARY KEY,
    "post_id" integer NOT NULL,
    "tag_id" integer NOT NULL REFERENCES "myblog_tag" ("id"),
    UNIQUE ("post_id", "tag_id")
)
;
CREATE TABLE "myblog_post" (
    "id" integer NOT NULL PRIMARY KEY,
    "title" varchar(200) NOT NULL,
    "pub_date" datetime NOT NULL,
    "content" text NOT NULL
) …
Run Code Online (Sandbox Code Playgroud)

python django unit-testing manytomanyfield

6
推荐指数
1
解决办法
1268
查看次数

django manytomanyfield .add()方法

假设我有:

class Album(models.Model):
    photos = models.ManyToManyField('myapp.Photo')
    photo_count = models.IntegerField(default = 0)

class Photo(models.Model):
    photo = models.ImageField(upload_to = 'blahblah')
Run Code Online (Sandbox Code Playgroud)

我想要的是,每次调用.add()方法时,都会增加photo_counton Album类,所以我想覆盖.add()方法.问题是,我无法导入.add()该类,因为它在方法内部,所以它就像def->class->def.那么无论如何要覆盖.add()?或者有更好的方法来做到这一点?

python django overriding manytomanyfield

6
推荐指数
1
解决办法
1691
查看次数

如何使用Django Rest Framework将数据添加到ManyToMany字段?

我是DJango的新手,我希望使用rest框架中的序列化器将数据添加到多对多字段中。

我的模特:

class IngFamily(models.Model):
 name=models.CharField(max_length=30, unique=True, verbose_name='ingredient parent')

class UserProfile(models.Model):
      user=models.ForeignKey(User)
      allergies=models.ManyToManyField(IngFamily, verbose_name='allergies', null=True)
Run Code Online (Sandbox Code Playgroud)

现在,我想使用其余的api将数据添加到UserProfile模型。

我环顾四周,但找不到任何地方。

到目前为止,我已经实现了:

序列化器:

class IngFlySerializer(serializers.ModelSerializer):

  class Meta:
    model = IngFamily
    fields= ('name',)


class UserProfileSerializer(serializers.ModelSerializer):
  allergies=IngFlySerializer(many=True,)
  class Meta:
        model = UserProfile
        fields=('allergies',)

  def create(self, validated_data):

    allergies_data =validated_data.pop('allergies', [])

    #import pdb;pdb.set_trace()
    user1=UserProfile.objects.create(**validated_data)
    for allergy in allergies_data:

      al=IngFamily.objects.filter(name=allergy.get('name'))
      #al.name=allergy.get('name')
      user1.allergies.add(al)

    user1.save()
    return user1
Run Code Online (Sandbox Code Playgroud)

当我尝试使用它时,“ al”为空。

视图:

class user_profile(generics.ListCreateAPIView):


  serializer_class = UserProfileSerializer
  permission_classes = (permissions.IsAuthenticated,)

  def get_queryset(self):
        user = self.request.user
        return UserProfile.objects.filter(user=user)

  def perform_create(self, serializer):
      #import pdb; pdb.set_trace()
      serializer.save(user=self.request.user) …
Run Code Online (Sandbox Code Playgroud)

python django serializer manytomanyfield django-rest-framework

6
推荐指数
1
解决办法
2237
查看次数

Django 抛出“禁止直接分配到多对多集合的前端”。错误

我有两个模型在DjangoUsersContexts。我所定义的模型如下

class User(models.Model):
    userId = models.PositiveIntegerField(null = False)
    pic = models.ImageField(upload_to=getUserImagePath,null=True)
    Email = models.EmailField(null = True)

class Contexts(models.Model):
    context_name = models.CharField(max_length=50)
    context_description = models.TextField()
    context_priority = models.CharField(max_length=1)
    users = models.ManyToManyField(User, related_name='context_users')
Run Code Online (Sandbox Code Playgroud)

现在我收到一个包含以下 JSON 的 POST 请求

{
"user" : 12,
"action" : "add",
"context_name": "Network debug",
"context_description" : "Group for debugging network issues",
"context_priority": "L"
}
Run Code Online (Sandbox Code Playgroud)

我想在表中创建一条记录。Contexts下面是我想要做的

from django.shortcuts import render
from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponse
import json
from .models import …
Run Code Online (Sandbox Code Playgroud)

django manytomanyfield python-3.x

6
推荐指数
1
解决办法
1万
查看次数