首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在实例化过程中获取CharField()的值?

如何在实例化过程中获取CharField()的值?
EN

Stack Overflow用户
提问于 2019-10-29 01:06:46
回答 2查看 57关注 0票数 0

我希望将模型字段值作为参数传递给另一个字段。

trademark_class.get_default()方法与我想要的很接近,但我不想只使用默认值。

在这种情况下,我也无法使用__dict__.['trademark_class'],因为我需要一个对类的' this‘引用,但不知道在这种情况下实现这一点的正确方法。

代码语言:javascript
复制
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

代码语言:javascript
复制
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)时:

代码语言:javascript
复制
{
  trademark_class : "class foo",
  trademark_number : "number bar",
  html : "<html>...
    <tag> class foo </tag> 
    <tag> number bar </tag>
...
</html>"
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-04 04:59:18

最后,我通过覆盖模型中的save()方法解决了我的问题。

代码语言:javascript
复制
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)
票数 0
EN

Stack Overflow用户

发布于 2019-10-29 02:32:44

我还是不能真正理解你想要做什么。但也许SerializerMethodField就是你想要的?

代码语言:javascript
复制
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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58595375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档