【问题标题】:How to save django fields using objects.create?如何使用objects.create保存django字段?
【发布时间】:2014-04-25 17:31:54
【问题描述】:

我有一个模型:

class Certificate(models.Model):
    comments = models.TextField(blank=True, default='')
    generic_certificate = models.ForeignKey(GenericCertificate, related_name='certificates_awarded')
    tag = models.ForeignKey('Tag', related_name='certificates_awarded', null=True, blank=True)
    created_at = models.DateTimeField(auto_now_add=True)
    history_timestamp = models.DateTimeField(auto_now=True)
    rewardee = models.ForeignKey(OrganisationUser, related_name='certificates_rewarded')
    position =  models.CharField(max_length=50, default = '0,0')

我想保存给定主键的位置字段。

这里是views.py:

def post(self, request , *args , **kwargs): 
        comments = Certificate.objects.values("comments").filter(pk = kwargs.get('cert_id') )
        gen_certi = Certificate.objects.values("generic_certificate").filter(pk = kwargs.get('cert_id') ) 
        tag = Certificate.objects.values("tag").filter(pk = kwargs.get('cert_id') )
        history_timestamp = Certificate.objects.values("history_timestamp").filter(pk = kwargs.get('cert_id') )
        rewardee = Certificate.objects.values("rewardee").filter(pk = kwargs.get('cert_id') )
        position = request.POST.get('hid')
        position = str([position])
        a = Certificate.objects.create( comments=comments, generic_certificate = gen_certi , tag=tag,rewardee=rewardee, position=position )
        print a

它的错误:

Exception Value:    
Cannot assign "[{'generic_certificate': 2}]": "Certificate.generic_certificate" must be a "GenericCertificate" instance.

请帮助如何将位置字段保存到数据库中。

【问题讨论】:

  • 您想更新同一条记录还是想在数据库中为您从request.POST 读取的position 添加新记录?

标签: django django-models django-views django-queryset


【解决方案1】:

gen_certi 变量是一个查询集(对象列表),因为您使用的是filter() - 请改用get()

gen_certi = Certificate.objects.get(pk = kwargs.get('cert_id')).generic_certificate

其实,我不明白你打算在视图中做什么。如果是修改对象,则不需要覆盖已有的字段,只需更新request.POST中传递给视图的字段,比如位置:

try:
    certificate = Certificate.objects.get(pk = kwargs.get('cert_id'))
    certificate.position = request.POST.get('hid')
    certificate.save()
except DoesNotExist: 
    # create new certificate
    certificate = Certificate()
    ...

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2017-05-10
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    • 2022-10-15
    • 2017-04-04
    • 2011-09-06
    • 2023-04-02
    • 2018-11-03
    相关资源
    最近更新 更多