标签: one-to-one

Django:OneToOneField-RelatedObjectDoesNotExist

我的模型中有以下两个类:

class Answer(models.Model):
    answer = models.CharField(max_length=300)
    question = models.ForeignKey('Question', on_delete=models.CASCADE)

    def __str__(self):
        return "{0}, view: {1}".format(self.answer, self.answer_number)


class Vote(models.Model):
    answer = models.OneToOneField(Answer, related_name="votes", on_delete=models.CASCADE)
    users = models.ManyToManyField(User)

    def __str__(self):
        return str(self.answer.answer)[:30]
Run Code Online (Sandbox Code Playgroud)

在外壳中我采取第一个答案:

>>> Answer.objects.all()[0]
<Answer: choix 1 , view: 0>
Run Code Online (Sandbox Code Playgroud)

我想获得 Vote 对象:

>>> Answer.objects.all()[0].votes
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "C:\Users\Hippolyte\AppData\Roaming\Python\Python38\site-packages\django\db\models\fields\related_descriptors.py", line 420, in __get__
    raise self.RelatedObjectDoesNotExist(
questions.models.Answer.votes.RelatedObjectDoesNotExist: Answer has no votes.
Run Code Online (Sandbox Code Playgroud)

但发生了错误。

我不明白为什么related_name不被识别。你可以帮帮我吗 ?

python django one-to-one

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

在grails中有一个关系和删除

我应该如何删除grails中hasOne关系中的子对象,例如:

class Face {
 static hasOne = [nose: Nose]
}
class Nose {
 Face face
 static belongsTo= Face
}
Run Code Online (Sandbox Code Playgroud)

我尝试通过两种方式删除子对象

1. face.nose.delete()
2. nose.delete()
Run Code Online (Sandbox Code Playgroud)

我总是得到相同的异常删除对象在两种方式中通过级联重新保存.还有一个针对hasOne的动态方法(如addMo和removeFrom for hasMany)吗?有帮助吗?

grails one-to-one

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

次要表或OnetoOne协会?

考虑以下"模型":

USER
    Long: PK
    String: firstName
    String: lastName

USER_EXT
    Long: PK
    String: moreInfo
    Date: lastModified
Run Code Online (Sandbox Code Playgroud)

我正在尝试查找/创建正确的Hibernate映射(使用Annotations),这样,使用HQL查询就像"来自用户"一样简单,它将生成以下SQL:

select firstName, moreInfo from USER, USER_EXT where user.pk = user_ext.pk
Run Code Online (Sandbox Code Playgroud)

我已经尝试了所有的东西,从使用@Secondarytable到@OneToOne协会,但我不能让它工作.

我现在得到的最好结果是@OneToOne关联生成多个SQL查询,一个用于获取USER中的行,而结果集中的每一行都有一个来自USER_EXT的select查询.

这是非常无效的.

任何的想法 ?

hibernate hql one-to-one

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

与用户模型(django.contrib.auth)的OneToOne关系,没有级联删除

当删除发挥作用时,我对OneToOneField的工作方式感到有些困惑.我能找到的唯一准权威信息来自django-developers上的这个帖子:

我不知道你是否发现了这个,但是删除工作是朝着一个方向发展的,但不是你想要的方向.例如,使用您在另一条消息中发布的模型:

class Place(models.Model): 
    name = models.CharField(max_length = 100)  
class Restaurant(models.Model): 
    place = models.OneToOneField(Place, primary_key=True)  
Run Code Online (Sandbox Code Playgroud)

如果您创建了与其关联的地方和餐厅,则删除该餐厅将不会删除该地点(这是您在此处报告的问题),但删除该地点将删除该餐厅.

我有以下型号:

class Person(models.Model):
    name = models.CharField(max_length=50)
    # ... etc ...
    user = models.OneToOneField(User, related_name="person", null=True, blank=True)
Run Code Online (Sandbox Code Playgroud)

它的成立这种方式让我可以轻松地访问personUser使用实例user.person.

但是,当我尝试删除User管理员中的记录时,自然它会向后传递到我的Person模型,正如线程所讨论的那样,显示了以下内容:

您确定要删除用户"JordanReiter2"吗?以下所有相关项目将被删除:

  • 网友:JordanReiter
    • 人:JordanReiter
      • 提交:Title1
      • 提交:Title2

不用说,我也没有要删除的Person记录,或任何其后代!

我想我理解逻辑:因为Person记录中的OneToOne字段中有一个值,删除User记录会user_id在数据库的列中创建一个错误的引用.

通常,解决方案是切换OneToOne字段所在的位置.当然,这是不可能的,因为User对象几乎是由它设定的django.contrib.auth.

有没有办法防止删除级联,同时仍然有一个直接的方式来访问人user?是创建扩展版本的模型的唯一方法吗?Userdjango.contrib

更新

我改变了模型名称,所以希望它现在更清晰了.基本上,有成千上万的人事记录.不是每个人都有登录,但如果他们这样做,他们只有一个登录.

django one-to-one django-authentication cascading-deletes

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

SQLAlchemy一对一关系,主要是外键

我将类映射到Drupal生成的现有MySQL表.我需要与表格(一对一)联系,但我遇到了问题.两个表的列nid.这两个字段都是主键.没有主键我无法定义外键.关系图不适用于主键.我的版本如下.

class Node(Base):
    __tablename__ = 'node'
    nid = Column(Integer, primary_key=True)
    vid = Column(Integer)
    uuid = Column(String(128))
    type = Column(String)

    field_data = relationship("NodeFieldData", order_by="NodeFieldData.nid", backref="node")

    def __repr__(self):
        return "<User(nid='%s', vid='%s', uuid='%s', type='%s')>" % (self.nid, self.vid, self.uuid, self.type)

class NodeFieldData(Base):
    __tablename__ = 'node_field_data'
    nid = Column(Integer, primary_key=True)
    type = Column(String, nullable=False)
    title = Column(String, nullable=False)
    #nid = Column(Integer, ForeignKey('Node.nid'))

    def __repr__(self):
        return "<User(nid='%s', vid='%s', uuid='%s', type='%s')>" % (self.nid, self.vid, self.uuid, self.type)
Run Code Online (Sandbox Code Playgroud)

谢谢.

python sqlalchemy one-to-one

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

使用反向字段时自动创建一对一关系

创建模型的两个实例并使用OneToOneField连接它们时,将创建连接并在创建对象时自动保存:

from django.db import models

class MyModel(models.Model):
    name = models.CharField(primary_key=True, max_length=255)
    next = models.OneToOneField('self', on_delete=models.SET_NULL, related_name='prev', null=True, blank=True)

>>> m2 = MyModel.objects.create(name="2")
>>> m1 = MyModel.objects.create(name="1", next=m2)
>>> m2.prev
<MyModel: 1>
>>> m2.refresh_from_db()
>>> m2.prev
<MyModel: 2>
Run Code Online (Sandbox Code Playgroud)

但是,在创建相同的连接但使用反向字段时,创建也会自动完成,但不会保存.

>>> m1 = MyModel.objects.create(name="1")
>>> m2 = MyModel.objects.create(name="2", prev=m1)
>>> m1.next
<MyModel: 2>
>>> m1.refresh_from_db()
>>> m1.next
Run Code Online (Sandbox Code Playgroud)

请注意,最后一个语句在返回后不会打印任何内容 None


如何在使用反向字段创建时始终保存关系,而无需.save()每次都手动使用?

django foreign-keys django-models one-to-one relational-database

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

c# - 实体框架核心级联删除一对一关系

我在服务和 Lexikon 之间有一对一的关系,而服务有 Lexikon 的外键。我的服务不需要 Lexikon,因此我将 LexikonID 设置为可为空。但我的 Lexikon 仅当与服务相关时才能存在,因此我将导航属性设置为 [必需]。我使用的是 Code First,因此 EF 构建了我的数据库。

 public class Service
 {

    public int ServiceID { get; set; }

    //Foreignkey
    public int? LexikonID { get; set; }

    //Navigation Properties

    public Lexikon Lexikon { get; set; }
 }

 public class Lexikon
 {
    public int LexikonID { get; set; }

    //Navigation Properties
    [Required]
    public SoftwareService SoftwareService { get; set; }

 }
Run Code Online (Sandbox Code Playgroud)

如果我删除我的服务,我会尝试自动删除 Lexikon 表中的数据,但不幸的是,我不知道如何执行此操作,因为我是 EF 新手。

我在 dbContext 中尝试了以下代码:

       modelBuilder.Entity<SoftwareService>()
                .HasOne(l => l.Lexikon)
                .WithOne(s => …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework cascade one-to-one entity-framework-core

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

在 JPA Hibernate 中加入部分组合键

我正在使用 JPA 为具有复合键的数据库定义数据模型。我无法更改数据库。

我有一个Car带有复合键(carType 和 carId)的实体。第二个(可选)PorscheInfo实体包含保时捷汽车的附加信息。不幸的是,相应的“porsche_info”表不包含包含 carType 信息的列,因为其条目专门引用CarType = 'Porsche'

此操作的 SQL 很简单:

SELECT *
FROM cars
LEFT JOIN porsche_info
ON cars.CarId = porsche_info.CarId
    AND cars.CarType = 'Porsche'
Run Code Online (Sandbox Code Playgroud)

如何将其转换为正确的 JPA 设置?

到目前为止,我有以下实体类:

@Embeddable
public class CarKey {
    private String carType;

    private String carId;
}

@Entity(name = "cars")
public class Car {
    @EmbeddedId
    private CarKey key;

    // car information

    @OneToOne
    @JoinColumn(name = "CarId", referencedColumnName = "CarId")
    private PorscheInfo porscheInfo;
    // or
    @OneToMany
    @JoinColumn(name = "CarId", …
Run Code Online (Sandbox Code Playgroud)

hibernate jpa one-to-one composite-key one-to-many

6
推荐指数
0
解决办法
746
查看次数

具有复合主键的一对一双向映射

有人可以帮助我使用 Hibernate/JPA 使用复合主键为以下关系进行双向一对一 JPA 映射吗? 在此处输入图片说明

mapping hibernate jpa one-to-one composite-primary-key

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

如何限制模糊连接只返回一场比赛

我正在尝试在 R 中创建一个程序,用三位数机场代码替换城市名称或机场名称。我想要进行模糊匹配以提供更大的灵活性,因为我试图替换的城市/机场名称的数据来自许多不同的来源。我的问题是,通过模糊匹配左连接,我似乎无法找到一种方法来仅从右表(代码)返回与左表(名称)最接近的匹配。

例如:将城市奥古斯塔 (Augusta, GA) 与奥古斯塔 (Augusta, GA) 和奥古斯塔 (Augusta, ME) 进行匹配并复制数据。我不想限制最大距离,因为我仍然想允许灵活性,但我不能让我的数据重复。我想找到一种方法来进行部分字符串匹配,但只返回最接近的结果。

我尝试过使用 fuzzyjoin 包,但从我所见,没有办法限制只有一场比赛或只有最佳比赛。我知道在 pmatch 中有一个禁止重复的调用,但我找不到使 pmatch 作为连接工作的方法。

data <- stringdist_left_join(data, orig, ignore_case = TRUE)
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的代码,stringdist 是 R 中 fuzzyjoin 包的函数。数据集“data”包含城市名称、航班数量和其他乘客信息。“orig”数据集有一列城市/机场名称和机场代码

SAMPLE INPUT
**data table:**
City Name       Passenger Name    Fare Paid
Augusta, GA         Jon            $100
Dallas, TX          Jane           $200
Spokane, WA         Chris          $300

**orig table:**
City Name      Code
Augusta, GA    JCL
Dallas, TX     DAL
Denver, CO     DEN
Seattle, WA    SEA
Spokane, WA    GEG
Austin, TX     AUS
Augusta, ME …
Run Code Online (Sandbox Code Playgroud)

r fuzzy one-to-one string-matching fuzzyjoin

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