简体   繁体   English

在Django模型中创建条目时出现奇怪的ValueError

[英]Getting a weird ValueError in creating entry in django model

I am creating an entry in Django model but it is showing ValueError for a field that doesn't even Exist 我正在Django模型中创建一个条目,但显示的是甚至不存在的字段的ValueError

I am using external script inside manage.py shell with 我在manage.py shell中使用外部脚本

python3 manage.py shell

>>> exec(open('file_name.py').read())

file_name.py (ignore the name :D) file_name.py(忽略名称:D)

from jtc.models import *

m = Movies.objects.get(title__icontains = "Badrinath")
mul = Multiplex.objects.get(movie__icontains = 'Badrinath', name = "PVR")
date = mul.date.all()
time = mul.time.all()
seat = Snumber.objects.filter(seat_avail = True)

st = Snumber.objects.get(seat_avail = True, seat_name = 'A1')
dt = Date.objects.get(date = '2017-05-10')
tm = Time.objects.get(timing='09:00:00')

Seats.objects.bulk_create(
    [
        Seats(movie_name = m, multiplex_name = mul,
              seat_no = st, date = dt, time=tm ),
    ]
)

This is error which i am getting 这是我得到的错误

    Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "<string>", line 23, in <module>
  File "/usr/local/lib/python3.5/dist-packages/django/db/models/base.py", line 550, in __init__
    setattr(self, prop, kwargs[prop])
  File "/usr/local/lib/python3.5/dist-packages/django/db/models/fields/related_descriptors.py", line 499, in __set__
    manager = self.__get__(instance)
  File "/usr/local/lib/python3.5/dist-packages/django/db/models/fields/related_descriptors.py", line 476, in __get__
    return self.related_manager_cls(instance)
  File "/usr/local/lib/python3.5/dist-packages/django/db/models/fields/related_descriptors.py", line 783, in __init__
    (instance, self.source_field_name))
ValueError: "<Seats: PVR Dehradun Badrinath ki dulhaniya 2017-05-10 09:00:00>" needs to have a value for field "seats" before this many-to-many relationship can be used.

This is my Seats model 这是我的座位模型

class Seats(models.Model):
    seat_no = models.ManyToManyField(Snumber)
    movie_name = models.ForeignKey(Movies)
    multiplex_name = models.ForeignKey(Multiplex)
    date = models.ForeignKey(Date)
    time = models.ForeignKey(Time)

    def __str__(self):
        b = str(self.date)
        c = str(self.time)
        d = str(self.multiplex_name)
        return d+" "+b+" "+c

In this case the error message isn't very helpful. 在这种情况下,错误消息不是很有帮助。 What it's trying to say is that you can't save a ManyToMany relationship until you have an id for both objects. 它要说的是,除非您拥有两个对象的ID,否则您将无法保存ManyToMany关系。 You need to save an instance of Seats first, and then add the ManyToMany field: 您需要先保存Seats的实例,然后添加ManyToMany字段:

seats = Seats.objects.create(movie_name=m, multiplex_name=mul, 
    date=dt, time=tm)
seats.seat_no.add(st)

You can read more about it in the docs . 您可以在docs中阅读有关它的更多信息。

In this line 在这条线

Seats.objects.bulk_create(
    [
        Seats(movie_name = m, multiplex_name = mul,
              seat_no = st, date = dt, time=tm, seats = 1 ),
    ]
)

you are setting seats = 1 . 您将seats = 1设置seats = 1 But the Seats model does not have a seats field. Seats的模型没有一个seats场。 This is most likely why you are getting the error. 这很可能是您收到错误的原因。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM