- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在 Django 中有一个包含人员和角色的数据库。人员与角色具有一对多的关系。问题是角色没有唯一的约束,例如 adam 和 david 可以是角色中的艺术家,但 django 创建了两个相同的艺术家条目,但我想要相同的条目,即 adam 和 david 应该指向一个条目。如果我将 unique 添加到我的角色字段而不是 django 说它应该是一对一的。有什么想法吗?
model.py 的一部分:
from django.db import models
from phonenumber_field.modelfields import PhoneNumberField
# Create your models here.
# possibillitas models here
class Person(models.Model):
mail=models.EmailField(default='yourname@gmail.com')
firstName=models.CharField(max_length=200,default='firstname')
lastName=models.CharField(max_length=200,default='lastname')
phoneNumber=PhoneNumberField()
streetAdress=models.CharField(max_length=200,default='streetAdress')
zipcode=models.CharField(max_length=200)
city=models.CharField(max_length=200,default='Göteborg')
country=models.CharField(max_length=200,default='Sweden')
def __str__(self):
return "%s %s" % (self.firstName,self.lastName)
class Meta:
ordering = ('firstName','lastName')
class Role(models.Model):
role=models.CharField(max_length=200)
# person=models.ManyToManyField(Person)
person=models.ForeignKey(Person,on_delete=models.CASCADE)
def __str__(self):
return self.role
class Meta:
ordering = ('role',)
class Name(models.Model):
name=models.CharField(max_length=200)
role=models.ForeignKey(Role,on_delete=models.CASCADE)
def __str__(self):
return self.name
class Meta:
ordering = ('name',)
为下面的答案修改了 admin.py:
from django.contrib import admin
from .models import Role,Alias,Address,Date,Person,Name
from django.conf.urls import url, include
# Register your models here.
admin.site.register(Role)
admin.site.register(Address)
admin.site.register(Date)
admin.site.register(Name)
admin.site.register(Alias)
admin.site.register(Person)
class AliasInline(admin.TabularInline):
# model=Role.person.through
model=Alias
extra=2
class RoleInline(admin.TabularInline):
# model=Role.person.through
model=Role
extra=2
class NameInline(admin.TabularInline): # nested inlines doesn't work
#class NameInline(admin.ModelAdmin): # nested inlines doesn't work
model=Name
extra=3
class PersonInline(admin.ModelAdmin):
fieldsets=[
(None,{'fields': ['mail','firstName','lastName','phoneNumber','streetAdress','zipcode','city','country']}),
]
inlines = [RoleInline]
search_fields = ['firstName']
最佳答案
简而言之:我认为唯一性约束应该放在 role
上Role
的属性模型,以防止一个创建多个 Role
与role
相同属性。
在我看来,您想在这里使用多对多 关系,因为这意味着 Person
可以有很多 Role
s 和一个 Role
可以与很多关联Person
您可能应该制作 role
字段(虽然 name
在这里可能更好)唯一,这样一个不能创建两个具有相同名称的角色:
class Role(models.Model):
role = models.CharField(max_length=200<b>, unique=True</b>)
<b>persons = models.ManyToManyField(Person, related_name='roles'</b>)
def __str__(self):
return self.role
class Meta:
ordering = ('role',)
我们可以创建两个 Person
都是艺术家,例如:
role_artist, __ = Role.objects.get_or_create(role='artist')
adam = Person.objects.create(firstName='Adam')
david = Person.objects.create(firstName='David')
adam.roles.add(role_artist)
david.roles.add(role_artist)
Name
作为through模型Name
您定义的模型,似乎可以用作 Through
模型:它向关系添加额外的数据。例如一个人可能有两个 Name
s:一个是歌手,一个是电影明星。这通常是 through
model [Django-doc] 的用例可以在关系中对额外数据进行编码,尽管将其命名为 Alias
可能更好(或者至少是一个更具描述性的名称)。
我们可以将其改造为:
class Role(models.Model):
role = models.CharField(max_length=200, unique=True)
persons = models.ManyToManyField(Person<b>, through='Alias'</b>, related_name='roles')
def __str__(self):
return self.role
class Meta:
ordering = ('role',)
class <b>Alias</b>(models.Model):
name = models.CharField(max_length=200)
role = models.ForeignKey(Role, on_delete=models.CASCADE)
person = models.ForeignKey(Person, on_delete=models.CASCADE)
def __str__(self):
return self.name
class Meta:
ordering = ('name',)
然后我们可以制作两个 Person
s adam
和 david
都是艺术家,每个人都有他们的艺术家名字:
role_artist, __ = Role.objects.get_or_create(role='artist')
adam = Person.objects.create(firstName='Adam')
david = Person.objects.create(firstName='David')
Alias.objects.create(name='Adam the magician', role=role_artist, person=adam)
Alias.objects.create(name='David the lion tamer', role=role_artist, person=david)
甚至有可能 Person
有多个Alias
ses,对于相同的角色。
Note: according to PEP 8 the naming convention is that attributes are lowercase and words are separated with underscores. So that means that it should be
first_name
instead offirstName
.
关于django - django 中的独特约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54894181/
我想做的是让 JTextPane 在 JPanel 中占用尽可能多的空间。对于我使用的 UpdateInfoPanel: public class UpdateInfoPanel extends JP
我在 JPanel 中有一个 JTextArea,我想将其与 JScrollPane 一起使用。我正在使用 GridBagLayout。当我运行它时,框架似乎为 JScrollPane 腾出了空间,但
我想在 xcode 中实现以下功能。 我有一个 View Controller 。在这个 UIViewController 中,我有一个 UITabBar。它们下面是一个 UIView。将 UITab
有谁知道Firebird 2.5有没有类似于SQL中“STUFF”函数的功能? 我有一个包含父用户记录的表,另一个表包含与父相关的子用户记录。我希望能够提取用户拥有的“ROLES”的逗号分隔字符串,而
我想使用 JSON 作为 mirth channel 的输入和输出,例如详细信息保存在数据库中或创建 HL7 消息。 简而言之,输入为 JSON 解析它并输出为任何格式。 最佳答案 var objec
通常我会使用 R 并执行 merge.by,但这个文件似乎太大了,部门中的任何一台计算机都无法处理它! (任何从事遗传学工作的人的附加信息)本质上,插补似乎删除了 snp ID 的 rs 数字,我只剩
我有一个以前可能被问过的问题,但我很难找到正确的描述。我希望有人能帮助我。 在下面的代码中,我设置了varprice,我想添加javascript变量accu_id以通过rails在我的数据库中查找记
我有一个简单的 SVG 文件,在 Firefox 中可以正常查看 - 它的一些包装文本使用 foreignObject 包含一些 HTML - 文本包装在 div 中:
所以我正在为学校编写一个 Ruby 程序,如果某个值是 1 或 3,则将 bool 值更改为 true,如果是 0 或 2,则更改为 false。由于我有 Java 背景,所以我认为这段代码应该有效:
我做了什么: 我在这些账户之间创建了 VPC 对等连接 互联网网关也连接到每个 VPC 还配置了路由表(以允许来自双方的流量) 情况1: 当这两个 VPC 在同一个账户中时,我成功测试了从另一个 La
我有一个名为 contacts 的表: user_id contact_id 10294 10295 10294 10293 10293 10294 102
我正在使用 Magento 中的新模板。为避免重复代码,我想为每个产品预览使用相同的子模板。 特别是我做了这样一个展示: $products = Mage::getModel('catalog/pro
“for”是否总是检查协议(protocol)中定义的每个函数中第一个参数的类型? 编辑(改写): 当协议(protocol)方法只有一个参数时,根据该单个参数的类型(直接或任意)找到实现。当协议(p
我想从我的 PHP 代码中调用 JavaScript 函数。我通过使用以下方法实现了这一点: echo ' drawChart($id); '; 这工作正常,但我想从我的 PHP 代码中获取数据,我使
这个问题已经有答案了: Event binding on dynamically created elements? (23 个回答) 已关闭 5 年前。 我有一个动态表单,我想在其中附加一些其他 h
我正在尝试找到一种解决方案,以在 componentDidMount 中的映射项上使用 setState。 我正在使用 GraphQL连同 Gatsby返回许多 data 项目,但要求在特定的 pat
我在 ScrollView 中有一个 View 。只要用户按住该 View ,我想每 80 毫秒调用一次方法。这是我已经实现的: final Runnable vibrate = new Runnab
我用 jni 开发了一个 android 应用程序。我在 GetStringUTFChars 的 dvmDecodeIndirectRef 中得到了一个 dvmabort。我只中止了一次。 为什么会这
当我到达我的 Activity 时,我调用 FragmentPagerAdapter 来处理我的不同选项卡。在我的一个选项卡中,我想显示一个 RecyclerView,但他从未出现过,有了断点,我看到
当我按下 Activity 中的按钮时,会弹出一个 DialogFragment。在对话框 fragment 中,有一个看起来像普通 ListView 的 RecyclerView。 我想要的行为是当
我是一名优秀的程序员,十分优秀!