这是我的模型。我想捕获“地址”列中的数据,然后将其显示在我用来填写另一个表格的表单的下拉菜单中,而不是再次输入电子邮件地址。
class Employee(models.Model):
address = models.EmailField(max_length=100,null=True)
first_name = models.CharField(max_length=50,null=True)
sec_name = models.CharField(max_length=50,null=True)
department = models.CharField(max_length= 50,null=True)
company = models.CharField(max_length= 50,null=True)
date_created = models.DateTimeField(default=timezone.now)
date_updated = models.DateTimeField(auto_now=True)
def __str__(self):
return self.first_name + ' - ' + self.department
这是我用来将数据添加到第二个模型的表单
class SaveCategory(forms.ModelForm):
name = forms.CharField(max_length="250")
description = forms.Textarea()
status = forms.ChoiceField(choices=[('1','Active'),('2','Inactive')])
class Meta:
model = Category
fields = ('name','status')
def clean_name(self):
id = self.instance.id if self.instance.id else 0
name = self.cleaned_data['name']
# print(int(id) > 0)
try:
if int(id) > 0:
category = Category.objects.exclude(id=id).get(name = name)
else:
category = Category.objects.get(name = name)
except:
return name
raise forms.ValidationError(f"{name} Category Already Exists.")
这是我要添加数据的模型。
class Category(models.Model):
name = models.CharField(max_length=250)
status = models.CharField(max_length=2, choices=(('1','Active'),('2','Inactive')), default=1)
date_created = models.DateTimeField(default=timezone.now)
date_updated = models.DateTimeField(auto_now=True)
def __str__(self):
return self.name
ForeignKey
[Django-doc] 来完成此操作,这也将保证 引用完整性。
class Category(models.Model):
name = models.CharField(max_length=250, unique=True)
status = models.CharField(
max_length=2, choices=(('1', 'Active'), ('2', 'Inactive')), default=1
)
employee = models.ForeignKey(Employee, on_delete=models.PROTECT)
description = models.TextField()
date_created = models.DateTimeField(auto_now_add=True)
date_updated = models.DateTimeField(auto_now=True)
def __str__(self):
return self.name
unique=True
[Django-doc],表单可以检查值本身是否是新的,并且通过使用 auto_now_add=True
和 auto_now=True
,字段默认是不可编辑的,因此将不会出现在表格中。因此,该表格可以实现为:
class CategoryForm(forms.ModelForm):
class Meta:
model = Category
fields = '__all__'
那就是
__all__
。