可以说我有两个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模型移动到竞赛应用程序中,我真的不想这样做).
如何检查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
我有一个带烹饪食谱的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) 我有一个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
这是我的模型的代表:
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对象列表.还有一个A与Bs 相关的对象.像这样的东西:
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) 在 Django 中,调用object.manytomany.all().reverse()及其等效模板 ,object.manytomany.all.reverse似乎不适用于多对多关系。
如何反转多对多关系的结果列表?
django many-to-many django-templates django-orm 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) 假设我有:
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()?或者有更好的方法来做到这一点?
我是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
我有两个模型在DjangoUsers和Contexts。我所定义的模型如下
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 ×10
manytomanyfield ×10
python ×7
angularjs ×1
django-apps ×1
django-orm ×1
many-to-many ×1
model ×1
overriding ×1
python-3.x ×1
serializer ×1
unit-testing ×1