【问题标题】:insert query using django-models使用 django-models 插入查询
【发布时间】:2018-03-13 06:31:58
【问题描述】:

数据库结构

用户,用户有多个事件,事件有多个参与者。

用户模型:

from django.db import models


class User(models.Model):
    email = models.CharField(max_length=100, unique=True, null=True)
    firstname = models.CharField(max_length=100, null=True)
    lastname = models.CharField(max_length=100, null=True)
    org_url = models.CharField(max_length=100, null=True)

    office_username = models.CharField(max_length=100, null=True)
    office_email = models.CharField(max_length=100, null=True)

    isdeleted = models.BooleanField(default=False)
    createdon = models.DateTimeField(auto_now_add=True, null=True)
    modifiedon = models.DateTimeField(auto_now=True, null=True)

事件模型:

from django.db import models
from .user import User


class OEvent(models.Model):
    frk_user = models.ForeignKey(User, on_delete=models.CASCADE)    
    o_event_id = models.CharField(max_length=250, null=True)
    location = models.CharField(max_length=250, null=True)
    starts_at = models.CharField(max_length=50, null=True)
    ends_at = models.CharField(max_length=50, null=True)
    event_title = models.CharField(max_length=150, null=True)

    isdeleted = models.BooleanField(default=False)
    createdon = models.CharField(max_length=50, null=True)
    modifiedon = models.CharField(max_length=50, null=True)

参加者模型:

from django.db import models
from .o_events import OEvent

class OEventAttendee(models.Model):
    frk_o_event = models.ForeignKey(OEvent, on_delete=models.CASCADE)
    email = models.CharField(max_length=200, null=True)
    name = models.CharField(max_length=200, null=True)

我可以像这样针对用户插入事件:

user.oevent_set.create(
        o_event_id=nData['Id'],
        location=nData['Location']['DisplayName'],
        starts_at=startdt,
        ends_at=enddt,
        event_title=nData['Subject'],
        isdeleted=False,
        createdon=createdon,
        modifiedon=modifiedon
    )

添加这样的与会者的最佳、简单、快捷的方法是什么?

我假设一定有什么我们可以在 modifiedon 字段之后添加event_attendees list = attendees array。但是找不到类似的东西。

【问题讨论】:

  • 如何使用serializer 并使用自定义.create() 方法创建实例?

标签: python django django-models django-rest-framework


【解决方案1】:

在您的“OEventAttendee”模型中,您需要一个“OEvent”实例,因此您需要先创建“OEvent”实例,然后您可以使用 Django bulk_create 方法创建参加者

【讨论】:

    【解决方案2】:

    您可以添加related_name="events" 用于用户字段上的事件和与会者related_name="attendees",这样您就可以做

    user.events.attendees.all() 并且在您创建与会者后,您可以在 for 循环中执行 user.events.attendees.add(atendee)

    【讨论】:

    • 不,实际上我只有一个用户,我正在创建活动,我想与与会者一起创建活动。我们不想创建活动然后添加与会者。如果可能的话。
    • 您必须先创建活动,然后才能在循环所有与会者时执行atend = OEventAttendee(frk_o_event=event ...)
    • 好的,这意味着我不能在这个创建函数中这样做:(
    • 是的,一直都是这样
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    • 2021-08-09
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 2020-08-04
    相关资源
    最近更新 更多