Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django对象名称,can';不要比较数值_Django_Python 3.x_Web_Django Models - Fatal编程技术网

Django对象名称,can';不要比较数值

Django对象名称,can';不要比较数值,django,python-3.x,web,django-models,Django,Python 3.x,Web,Django Models,关于两件事的问题;首先,在管理面板和网页中,外键显示为对象(1),是的,我知道我们使用str东西的解决方案,但当我尝试比较它们的id时,它取str函数结果的值,让我在代码中显示; 我正在检查登录用户的连接公司id,该id仅等于与同一公司连接的学生 model.py-学生 class Student(models.Model): id = models.AutoField(primary_key=True, verbose_name='StudentID') parentid =

关于两件事的问题;首先,在管理面板和网页中,外键显示为对象(1),是的,我知道我们使用str东西的解决方案,但当我尝试比较它们的id时,它取str函数结果的值,让我在代码中显示; 我正在检查登录用户的连接公司id,该id仅等于与同一公司连接的学生

model.py-学生

class Student(models.Model):
    id = models.AutoField(primary_key=True, verbose_name='StudentID')
    parentid = models.ForeignKey(Parent, on_delete=models.CASCADE, verbose_name='ParentID')
    companyid = models.ForeignKey(Company, on_delete=models.CASCADE, verbose_name='CompanyID')
    classid = models.ForeignKey(Classes, on_delete=models.CASCADE, verbose_name='ClassID')
    gender = models.CharField(max_length=1, default='N', verbose_name='Gender')
    name = models.CharField(max_length=30, verbose_name='Name')
    surname = models.CharField(max_length=30, verbose_name='Surname')
    dob = models.DateTimeField(verbose_name='Doğum Yılı')
    bloodtype = models.ForeignKey(BloodType, on_delete=models.CASCADE, verbose_name='Blood Type')
    status = models.BooleanField(verbose_name='State')

    list_display = ('id', 'parentid', 'companyid', 'classid', 'gender', 'name', 'surname', 'dob', 'bloodtype', 'status')

    def __str__(self):
        return "%s  %s - %s" % (self.name, self.surname, self.gender)
model.py-公司

class Company(models.Model):
    id = models.AutoField(primary_key=True, verbose_name='CompanyID')
    name = models.CharField(
        max_length=100, verbose_name='Company Name')
    contactname = models.CharField(max_length=30)
    contactsurname = models.CharField(
        max_length=30)
    address = models.CharField(max_length=200)
    city = models.CharField(max_length=20)
    phone = models.CharField(max_length=12)
    weburl = models.URLField(max_length=80)
    email = models.CharField(max_length=80)
    studentcapacity = models.BigIntegerField(verbose_name='Student Capacity')
    classcapacity = models.BigIntegerField(verbose_name='Class Capacity')
    notes = models.TextField(max_length=200)
    status = models.BooleanField(verbose_name='State')

    list_display = ('id', 'name', 'contactname', 'contactsurname', 'address', 'city', 'phone',
                    'weburl', 'email', 'studentcapacity', 'classcapacity', 'notes', 'status')

    def __str__(self):
        return "%s -  %s" % (self.id, self.name)

@login_required()
def student_update(request, pk):
    student = get_object_or_404(Student, pk=pk)

    usercompanyid = UserProfile.objects.filter(userid=request.user.id).only('companyid')
    print('before control')

    a = usercompanyid.values_list('companyid', flat=True)[0]
    print(a)

    print(student.companyid)

    if student.companyid == a:

        print('passed if')
        if request.method == 'POST':
            form = StudentForm(request.POST, instance=student)
        else:
            form = StudentForm(instance=student)
            return save_student_form(request, form, 'student_update_partial.html')
    else:
        return view_404(request)
视图.py

class Company(models.Model):
    id = models.AutoField(primary_key=True, verbose_name='CompanyID')
    name = models.CharField(
        max_length=100, verbose_name='Company Name')
    contactname = models.CharField(max_length=30)
    contactsurname = models.CharField(
        max_length=30)
    address = models.CharField(max_length=200)
    city = models.CharField(max_length=20)
    phone = models.CharField(max_length=12)
    weburl = models.URLField(max_length=80)
    email = models.CharField(max_length=80)
    studentcapacity = models.BigIntegerField(verbose_name='Student Capacity')
    classcapacity = models.BigIntegerField(verbose_name='Class Capacity')
    notes = models.TextField(max_length=200)
    status = models.BooleanField(verbose_name='State')

    list_display = ('id', 'name', 'contactname', 'contactsurname', 'address', 'city', 'phone',
                    'weburl', 'email', 'studentcapacity', 'classcapacity', 'notes', 'status')

    def __str__(self):
        return "%s -  %s" % (self.id, self.name)

@login_required()
def student_update(request, pk):
    student = get_object_or_404(Student, pk=pk)

    usercompanyid = UserProfile.objects.filter(userid=request.user.id).only('companyid')
    print('before control')

    a = usercompanyid.values_list('companyid', flat=True)[0]
    print(a)

    print(student.companyid)

    if student.companyid == a:

        print('passed if')
        if request.method == 'POST':
            form = StudentForm(request.POST, instance=student)
        else:
            form = StudentForm(instance=student)
            return save_student_form(request, form, 'student_update_partial.html')
    else:
        return view_404(request)

如果状态为“student.companyid==a:”=companyid-公司名称,输出:1-测试CompanyName=1,我需要它返回我调用的唯一字段companyid,我知道它与“companyid-CompanyName”相同。有没有可能用另一种方法来解决这个问题,我不支持django python,只是想做一些项目来学习,如果这是一个垃圾问题,对不起:)

这里有很多不必要的混乱,只处理
值。不需要这些。直接比较对象即可:

def student_update(request, pk):
    student = get_object_or_404(Student, pk=pk)
    if student.companyid == request.userprofile.companyid:
        ...

顺便说一句,您不应该将外键称为“companyid”、“parentid”等;它们不是ID,它们是对象。称他们为“公司”、“家长”等。

这里有很多不必要的乱七八糟的东西,只有
值。不需要这些。直接比较对象即可:

def student_update(request, pk):
    student = get_object_or_404(Student, pk=pk)
    if student.companyid == request.userprofile.companyid:
        ...
顺便说一句,您不应该将外键称为“companyid”、“parentid”等;它们不是ID,它们是对象。当您这样做时,请称他们为“公司”、“家长”等。

companyid = models.ForeignKey(...)
数据库架构实际上有一个字段名
companyid\u id

因此,在您的情况下,如果您想要比较对象ID,那么您实际上需要这样做:

if student.companyid_id == a:
为避免混淆,我建议您不要在Django模型字段名中附加“id”部分。

执行此操作时:

companyid = models.ForeignKey(...)
数据库架构实际上有一个字段名
companyid\u id

因此,在您的情况下,如果您想要比较对象ID,那么您实际上需要这样做:

if student.companyid_id == a:
为了避免混淆,我建议您不要在Django模型字段名后面附加“id”部分