我希望将模型字段值作为参数传递给另一个字段。
trademark_class.get_default()方法与我想要的很接近,但我不想只使用默认值。
在这种情况下,我也无法使用__dict__.['trademark_class'],因为我需要一个对类的' this‘引用,但不知道在这种情况下实现这一点的正确方法。
class Form_33_Model(models.Model):
trademark_number = models.CharField(default='default number', max_length=30)
trademark_class = models.CharField(default='default class', max_length=30)
trademark_date = models.DateField(default=datetime.date.today)
html = models.TextField(default=Form33StringClass(trademark_class=trademark_class.get_default(),
trademark_number=trademark_number.get_default()).form_33_string)我希望获取Charfield的实际值或其默认值,而不是仅获取默认值。
所以像这样的东西:trademark_class.get_current_value_or_default()将是我想要的理想。
下面是我的Form33StringClass.py
import datetime
class Form33StringClass():
def __init__(self, trademark_number, trademark_class):
self.trademark_number = trademark_number
self.trademark_class = trademark_class
self.day = datetime.datetime.now().strftime("%A") + " " + datetime.datetime.now().strftime("%d")
self.month = datetime.datetime.now().strftime("%B")
self.year = datetime.datetime.now().strftime("%Y")
self.form_33_string = """
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Trade Marks Act</title>
<style>
.letter_margin {
margin: auto 25%;
line-height: 25px;
}
header{
text-align: center;
}
.intro {
text-align: center;
font-style: italic;
}
.request{
}
.office_address{
width: 50%;
margin-left: 10%;
}
.address_row{
display: flex;
align-items: baseline;
}
.re-address_row{
/* float: right; */
display: flex;
justify-content: flex-end;
}
.re_address{
width: 60%;
}
.to_registrar{
display: flex;
align-items: baseline;
}
.registrar_paragraph {
margin-left: 10%;
}
.underlined{
text-decoration: underline;
}
.trademark_class{
}
.trademark_number{
}
</style>
</head>
<body>
<table>
<tr>
<header>
<h1>TRADE MARKS ACT</h1>
<h2>FORM 33</h2>
</header>
</tr>
<tr >
<div class="intro letter_margin">
<p>
Form of Request to the Registrar by a Registered Proprietor or a Registered User of a Trade Mark, or a person about to be so registered, to enter, alter, or substitute an Address for service as part of his Registration (Regulations 15, 82. 86 and 102)
</p>
</div>
</tr>
<tr>
<div class="request letter_margin">
<p >
Request is made by: <br><br>
A company incorporated in <br>
Carrying on business as manufacturers and merchants at:<br><br><br>
who is about to be registered as/who is the Registered Proprietor of Trade Mark(s)<br> No <span class="underlined trademark_number"> """+ trademark_number +"""</span> registered in Class(es) <span class="underlined trademark_class"> """+trademark_class+"""</span> <br>
for the inclusion/addition/alteration/substitution of an address for service in Nigeria in or to <br> the entry thereof so that the address for service in Nigeria may read:
</p>
</div>
</tr>
....
</body>
</html>
"""创建新的Form_33_Model.objects.create(trademark_class,trademark_number)时:
{
trademark_class : "class foo",
trademark_number : "number bar",
html : "<html>...
<tag> class foo </tag>
<tag> number bar </tag>
...
</html>"
}发布于 2019-11-04 04:59:18
最后,我通过覆盖模型中的save()方法解决了我的问题。
class Form_33_Model(models.Model):
trademark_number = models.CharField(default='default number', max_length=30)
trademark_class = models.CharField(default='default class', max_length=30)
trademark_date = models.DateField(default=datetime.date.today)
html = models.TextField(default=Form33StringClass(
trademark_class=trademark_class.get_default(),
trademark_number=trademark_number.get_default()
).form_33_string)
def save(self, *args, **kwargs):
self.html = Form33StringClass(
trademark_class=self.trademark_class,
trademark_number=self.trademark_number
).form_33_string
super(Form_33_Model, self).save(*args, **kwargs)发布于 2019-10-29 02:32:44
我还是不能真正理解你想要做什么。但也许SerializerMethodField就是你想要的?
class Form33ModelSerializer(serializers.ModelSerializer):
html = SerializerMethodField()
class Meta:
model = Form_33_Model
def get_html(self, obj):
return obj.html or obj._meta.get_field('trademark_class').get_default()https://stackoverflow.com/questions/58595375
复制相似问题