Django对象名称,can';不要比较数值
关于两件事的问题;首先,在管理面板和网页中,外键显示为对象(1),是的,我知道我们使用str东西的解决方案,但当我尝试比较它们的id时,它取str函数结果的值,让我在代码中显示; 我正在检查登录用户的连接公司id,该id仅等于与同一公司连接的学生 model.py-学生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 =
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”部分